主要内容

importONNXFunction

导入预训练的ONNX网络作为函数

自从R2020b

    描述

    例子

    参数个数= importONNXFunction (modelfileNetworkFunctionName从文件中导入ONNX™(Open Neural Network Exchange)网络modelfile并返回ONNXParameters对象(参数个数),其中包含网络参数。函数还创建了一个模型函数,其名称为NetworkFunctionName其中包含了网络架构。有关网络功能的详细信息,请参见导入ONNX模型函数

    使用ONNXParameters对象和NetworkFunctionName模型函数执行常见的深度学习任务,如图像和序列数据分类、迁移学习、目标检测和图像分割。importONNXFunction方法在无法导入网络时使用importONNXNetwork函数(例如,importONNXFunction可以导入YOLOv3)或者如果您想定义自己的自定义训练循环(有关详细信息,请参阅使用自定义训练循环训练网络).

    此函数需要ONNX模型格式的深度学习工具箱™转换器金宝app支持包。如果没有安装此支金宝app持包,则该函数将提供下载链接。

    例子

    全部折叠

    导入ONNX网络作为函数。您可以将导入的模型函数用于深度学习任务,例如预测和迁移学习。

    下载并安装ONNX模型格式的深度学习工具箱转换器支持包。金宝app你可以进入importONNXFunction在命令行检查是否安装了支持包。金宝app如果没有安装,则该函数将在Add-On资源管理器中提供到所需支持包的链接。金宝app要安装支持包,请单击链接,然后金宝app单击安装

    指定要导入的文件shufflenet使用ONNX模型动物园的操作符集9。shufflenet是一种卷积神经网络,它是在ImageNet数据库中的图像上训练的。

    modelfile =“shufflenet - 9. onnx”

    将网络作为函数导入,以生成可以用于深度学习任务的模型函数。

    params = importONNXFunction“shufflenetFcn”
    函数中包含导入的ONNX网络架构,保存到文件shufflenetFcn.m中。要了解如何使用此函数,输入:help shufflenetFcn。
    params = ONNXParameters with properties: Learnables: [1x1 struct] Nonlearnables: [1x1 struct] State: [1x1 struct] NumDimensions: [1x1 struct] NetworkFunctionName: 'shufflenetFcn'

    importONNXFunction返回ONNXParameters对象参数个数,其中包含网络参数,以及模型函数shufflnetFcn,其中包含网络架构。importONNXFunction节省了shufflenetFcn在当前文件夹中。您可以打开模型功能,使用,查看或编辑网络架构打开shufflenetFcn

    ONNX模型格式的深度学习工具箱转换器还提供importONNXNetwork而且importONNXLayers函数,您可以使用它来导入预训练的ONNX网络。有关导入函数最适合不同场景的信息,请参见选择Function导入ONNX预训练网络

    将ONNX网络作为函数导入,使用预训练的网络预测输入图像的类标签。

    指定要导入的文件shufflenet使用ONNX模型动物园的操作符集9。shufflenet是一个卷积神经网络,它是在ImageNet数据库中的100多万张图像上进行训练的。因此,该网络已经学习了广泛图像的丰富特征表示。该网络可以将图像分为1000个对象类别,例如键盘、鼠标、铅笔和许多动物。

    modelfile =“shufflenet - 9. onnx”

    将预先训练好的ONNX网络作为函数导入,使用importONNXFunction,它返回ONNXParameters对象参数个数.包含网络参数。该函数还在包含网络架构的当前文件夹中创建一个新的模型函数。指定模型函数的名称为shufflenetFcn

    params = importONNXFunction“shufflenetFcn”);
    已将导入的ONNX网络函数保存到文件“shufflenetFcn.m”中。要了解如何使用此函数,输入:help shufflenetFcn。

    读取要分类的图像并显示图像的大小。图像是792 × 1056像素,有三个颜色通道(RGB)。

    I = imread(“peacock.jpg”);大小(我)
    ans =1×3792 1056

    将图像大小调整为网络的输入大小。显示图像。

    I = imresize(I,[224 224]);imshow(我)

    的输入shufflenet需要进一步预处理(有关详细信息,请参见在ONNX模型动物园ShuffleNet).重新缩放图像。通过减去训练图像的均值,再除以训练图像的标准差,对图像进行归一化。

    I = rescale(I,0,1);meanIm = [0.485 0.456 0.406];stdIm = [0.229 0.224 0.225];I = (I - remodeling (meanIm,[1 1 3]))。/重塑(stdIm,[1 1 3]);imshow(我)

    导入类名squeezenet,它也是用ImageNet数据库中的图像进行训练的。

    网=挤压网;ClassNames = net.Layers(end).ClassNames;

    通过指定要分类的图像来计算类概率ONNXParameters对象参数个数作为模型函数的输入参数shufflenetFcn

    scores = shufflenetFcn(I,params);

    找出概率最高的类索引。显示输入图像的预测类别和相应的分类分数。

    indMax = find(scores==max(scores));类名(indMax)
    ans =1×1单元格数组{“孔雀”}
    scoreMax = scores(indMax)
    scoreMax = 0.7517

    导入squeezenet卷积神经网络作为一个函数,并通过迁移学习对预训练的网络进行微调,对新的图像集合进行分类。

    这个例子使用了几个helper函数。要查看这些函数的代码,请参见辅助函数

    解压缩并将新映像加载为映像数据存储。imageDatastore根据文件夹名称自动标记图像,并将数据存储为ImageDatastore对象。图像数据存储使您能够存储大量图像数据,包括不适合内存的数据,并在卷积神经网络训练期间有效地读取批量图像。指定小批大小。

    解压缩(“MerchData.zip”);miniBatchSize = 8;imds = imageDatastore(“MerchData”...IncludeSubfolders = true,...LabelSource =“foldernames”...ReadSize = miniBatchSize);

    这个数据集很小,包含75张训练图像。显示一些示例图像。

    numImages = nummel (imds.Labels);idx = randperm(numImages,16);数字i = 1:16 subplot(4,4,i) i = readimage(imds,idx(i));imshow(我)结束

    提取训练集,对分类标签进行单热编码。

    XTrain = readall(imds);XTrain = single(cat(4,XTrain{:}));YTrain_categ = categorical(imds.Labels);YTrain = onehotencode(YTrain_categ,2)';

    确定数据中的类数量。

    classes = categories(YTrain_categ);numClasses = numel(类)
    numClasses = 5

    squeezenet是一个卷积神经网络,它是在ImageNet数据库中的100多万张图像上进行训练的。因此,该网络已经学习了广泛图像的丰富特征表示。该网络可以将图像分为1000个对象类别,例如键盘、鼠标、铅笔和许多动物。

    导入预训练的squeezenet网络是一种功能。

    挤压onnx () params = importONNXFunction()“squeezenet.onnx”“squeezenetFcn”
    包含导入的ONNX网络架构的函数保存到文件squeezenetFcn.m。要了解如何使用此函数,请键入:help squeezenetFcn。
    params = ONNXParameters with properties: Learnables: [1×1 struct] Nonlearnables: [1×1 struct] State: [1×1 struct] NumDimensions: [1×1 struct] NetworkFunctionName: 'squeezenetFcn'

    参数个数是一个ONNXParameters对象,该对象包含网络参数。squeezenetFcn是包含网络体系结构的模型函数。importONNXFunction节省了squeezenetFcn在当前文件夹中。

    计算新训练集上预训练网络的分类准确率。

    accuracyBeforeTraining = getNetworkAccuracy(XTrain,YTrain,params);流(“%。2f accuracy before transfer learning\n", accuracyBeforeTraining);
    迁移学习前0.01精度

    精度很低。

    通过输入显示网络的可学习参数参数个数。可学的.这些参数,例如权重(W)和偏差(B)的卷积和全连接层,在训练过程中由网络更新。不可学习参数在训练过程中保持不变。

    为1000个类配置预训练网络的最后两个可学习参数。

    conv10_W: [1×1×512×1000 dlarray]

    conv10_B: [1000×1 dlarray]

    的参数conv10_W而且conv10_B必须对新的分类问题进行微调。通过初始化参数,将参数转换为五个类。

    params.Learnables。conv10_W= rand(1,1,512,5); params.Learnables.conv10_B = rand(5,1);

    冻结网络的所有参数,将它们转换为不可学习的参数。因为你不需要计算冻结层的梯度,冻结许多初始层的权重可以显著加快网络训练。

    params = freezeParameters(参数,“所有”);

    解冻网络的最后两个参数,将它们转换为可学习的参数。

    params = unfreezeParameters(“conv10_W”);params = unfreezeParameters(“conv10_B”);

    网络已准备好进行训练。指定培训选项。

    速度= [];numEpochs = 5;miniBatchSize = 16;initialLearnRate = 0.01;动量= 0.9;衰减= 0.01;

    计算训练进度监控器的总迭代次数。

    numObservations = size(YTrain,2);numIterationsPerEpoch = floor(numObservations./miniBatchSize);numIterations = nummepochs *numIterationsPerEpoch;

    初始化TrainingProgressMonitor对象。因为计时器在创建监视器对象时开始,所以请确保在训练循环之后立即创建对象。

    monitor = trainingProgressMonitor(指标=“损失”信息=“时代”包含=“迭代”);

    培训网络。

    Epoch = 0;迭代= 0;executionEnvironment =“cpu”%更改为“gpu”,在gpu上训练。%遍历epoch。epoch < numEpochs && ~monitor。停止epoch = epoch + 1;% Shuffle数据。idx = randperm(numObservations);XTrain = XTrain(:,:,:,idx);YTrain = YTrain(:,idx);在小批上循环。I = 0;i < numIterationsPerEpoch && ~monitor。Stop i = i + 1;迭代=迭代+ 1;读取小批数据。idx = (i-1)*miniBatchSize+1:i*miniBatchSize;X = XTrain(:,:,:,idx);Y = YTrain(:,idx);如果在GPU上训练,则将数据转换为gpuArray。如果(executionEnvironment = =“汽车”&& canUseGPU) || executionEnvironment ==“图形”X = gpuArray(X);结束使用dlfeval和% modelGradients函数。[gradients,loss,state] = dlfeval(@modelGradients,X,Y,params);参数个数。状态=状态;确定基于时间的衰减学习率计划的学习率。learnRate = initialLearnRate/(1 +衰减*迭代);使用SGDM优化器更新网络参数。(参数。Learnables,velocity] = sgdmupdate(params.Learnables,gradients,velocity);更新培训进度监视器。recordMetrics(监控、迭代损失=损失);updateInfo(监视、时代=时代);班长。进度= 100 * iteration/numIterations;结束结束

    计算网络经过微调后的分类精度。

    accuracyAfterTraining = getNetworkAccuracy(XTrain,YTrain,params);流(“%。2f accuracy after transfer learning\n", accuracyAfterTraining);
    迁移学习后的准确率为1.00

    辅助函数

    本节提供本例中使用的helper函数的代码。

    getNetworkAccuracy函数通过计算分类精度来评估网络性能。

    函数(X,Y,onnxParams) N = size(X,4);Ypred = squeezenetFcn(X,onnxParams,Training=false);[~,YIdx] = max(Y,[],1);[~,YpredIdx] = max(Ypred,[],1);numIncorrect = sum(abs(YIdx-YpredIdx) > 0);1 - numIncorrect/N;结束

    modelGradients函数计算损失和梯度。

    函数[grad, loss, state] = modelGradients(X,Y,onnxParams) [Y, state] = squeezenetFcn(X,onnxParams,Training=true);loss = crossentropy(y, y, DataFormat=“CB”);grad = dlgradient(loss,onnxParams.Learnables);结束

    squeezenetONNX函数的ONNX模型squeezenet网络。

    函数squeezenetONNX () exportONNXNetwork (squeezenet,“squeezenet.onnx”);结束

    导入一个ONNX长短期记忆(LSTM)网络作为函数,利用预先训练好的网络对序列数据进行分类。LSTM网络使您能够将序列数据输入到网络中,并基于序列数据的单个时间步长进行预测。

    本例使用helper函数preparePermutationVector.要查看此函数的代码,请参见Helper函数

    lstmNet有一个类似于LSTM网络的架构使用深度学习的序列分类lstmNet被训练来识别说话人,给定时间序列数据,代表连续说出两个日语元音。训练数据包含9位演讲者的时间序列数据。每个序列有12个特征,长度不同。

    指定lstmNet作为模型文件。

    modelfile =“lstmNet.onnx”

    将预先训练好的ONNX网络作为函数导入,使用importONNXFunction,它返回ONNXParameters对象参数个数包含网络参数。该函数还在包含网络架构的当前文件夹中创建一个新的模型函数。指定模型函数的名称为lstmnetFcn

    params = importONNXFunction“lstmnetFcn”);
    已将包含导入ONNX网络的函数保存到“lstmnetFcn.m”文件中。输入help lstmnetFcn可以了解如何使用该函数。

    加载日语元音测试数据。XTest是包含370个12维且长度不等的序列的单元格数组。欧美是标签“1”,“2”,…“9”,对应9个说话者。

    [XTest,YTest] =日本evowelstestdata;

    lstmNet使用具有相似长度序列的小批量进行训练。要以同样的方式组织测试数据,请按序列长度对测试数据进行排序。

    numObservationsTest = numel(XTest);i=1:numObservationsTest sequence = XTest{i};sequenceLengthsTest(i) = size(sequence,2);结束[sequenceLengthsTest,idx] = sort(sequenceLengthsTest);XTest = XTest(idx);YTest = YTest(idx);

    使用preparePermutationVector计算排列向量inputPerm,将输入序列数据的维序排列为导入的LSTM网络输入的维序。你可以打字帮助lstmnetFcn查看网络输入的维度顺序SEQUENCEINPUT

    inputPerm = preparePermutationVector([“FeaturesLength”“SequenceLength”“BatchSize”),...“SequenceLength”“BatchSize”“FeaturesLength”]);

    通过指定要分类的序列数据来计算类概率XTestONNXParameters对象参数个数作为模型函数的输入参数lstmnetFcn.通过分配数值向量自定义输入维度顺序inputPerm到name-value参数“InputDataPermutation”.返回分数在维序上对网络输出进行赋值“没有”到name-value参数“OutputDataPermutation”

    i = 1:length(XTest) scores = lstmnetFcn(XTest{i},params,“InputDataPermutation”inputPerm,“OutputDataPermutation”“没有”);YPred(i) = find(scores==max(scores));结束YPred = category (YPred');

    计算预测的分类精度。

    acc = sum(YPred == YTest)./ nummel (YTest)
    Acc = 0.9514

    Helper函数

    介绍helper函数的代码preparePermutationVector本例中使用。

    preparePermutationVector函数返回一个排列向量,它将排列中的维度顺序fromDimOrder到尺寸排序toDimOrder.您可以指定输入参数fromDimOrder而且toDimOrder如字符向量、字符串标量、字符串数组、字符向量的单元格数组或数值向量。两个参数必须具有相同的类型和相同的唯一元素。例如,如果fromDimOrder是字符向量“hwcn”toDimOrder可以是字符向量吗“nchw”(hw,c分别对应图像的高度、宽度和通道数,和n是观测数)。

    函数perm = preparePermutationVector(fromDimOrder, toDimOrder)检查fromDimOrder和toDimOrder是否都是向量。如果~isvector(fromDimOrder) || ~isvector(toDimOrder) error(message(“nnet_cnn_onnx: onnx: FPVtypes”));结束%将fromDimOrder和toDimOrder转换为适当的类型。如果isstring(fromDimOrder) && isscalar(fromDimOrder) fromDimOrder = char(fromDimOrder);结束如果isstring(toDimOrder) && isscalar(toDimOrder) toDimOrder = char(toDimOrder);结束检查fromDimOrder和toDimOrder是否有唯一的元素。[fromSorted, ifrom] = unique(fromDimOrder);[toSorted, ~, iToInv] = unique(toDimOrder);如果numel(fromSorted) ~= numel(fromDimOrder) error(message(“nnet_cnn_onnx: onnx: FPVfromunique”));结束如果数字(toDimOrder) ~=数字(toDimOrder)错误(message(“nnet_cnn_onnx: onnx: FPVtounique”));结束检查fromDimOrder和toDimOrder是否有相同数量的元素。如果~isequal(fromSorted, toSorted) error(message(“nnet_cnn_onnx: onnx: FPVsame”));结束计算排列向量。perm = ifrom(iToInv);Perm = Perm (:)';结束

    输入参数

    全部折叠

    包含网络的ONNX模型文件的名称,指定为字符向量或字符串标量。该文件必须在当前文件夹或MATLAB中的文件夹中®路径,或者必须包含文件的完整路径或相对路径。

    例子:“shufflenet.onnx”

    模型函数的名称,指定为字符向量或字符串标量。这个函数NetworkFunctionName包含了导入的ONNX网络的架构。该文件保存在当前文件夹中的m文件中,或者必须包含该文件的完整或相对路径。的NetworkFunctionName文件是使用网络所必需的。有关更多信息,请参见导入ONNX模型函数

    例子:“shufflenetFcn”

    输出参数

    全部折叠

    网络参数,返回为ONNXParameters对象。参数个数包含导入的ONNX模型的网络参数。的属性使用点表示法参数个数.例如,参数个数。可学的显示网络可学习参数,如卷积层的权重。

    限制

    • importONNXFunction金宝app支持以下ONNX版本:

      • ONNX中间表示版本6

      • ONNX操作符集7到13

    更多关于

    全部折叠

    进口ONNX模型函数

    importONNXFunction创建一个包含导入ONNX模型的网络架构的模型函数。指定名称NetworkFunctionName的输入参数importONNXFunction

    语法

    使用以下语法与导入的ONNX模型函数(NetworkFunctionName):

    • [Y,state] = NetworkFunctionName(X,参数个数返回输出数据Y更新后的网络状态对于输入数据X

    • [Y,state] = NetworkFunctionName(X,参数个数、名称、值)使用由一个或多个名-值对参数指定的其他选项。

    • (Y1, Y2,…,Yn,状态] = NetworkFunctionName(X1,X2,...,Xn,参数个数返回多个输出数据(Y1, Y2,…,Yn)及更新后的网络状态对于多个输入数据(X1, X2,…,Xn).

    • (Y1, Y2,…,Yn,状态] = NetworkFunctionName(X1,X2,...,Xn,参数个数、名称、值)为多个输入和输出使用一个或多个名称-值对参数指定的其他选项。

    输入参数
    论点 描述
    X 输入数据,指定为数组或dlarray
    参数个数 的网络参数ONNXParameters对象。
    名称-值对参数
    参数名称 描述
    “培训”

    培训选项,指定为“假”(默认)或“真正的”

    “InputDataPermutation”

    用于输入的维度排序的排列X,指定为“汽车”(默认),“没有”、数字向量或单元格数组。

    为名称-值对参数赋值“InputDataPermutation”将输入数据按导入的ONNX模型所需的维度顺序排列。

    • 赋值“汽车”基于对公共输入数据的假设应用自动排列X.详情请参见自动输入数据排列

    • 赋值“没有”通过X按原来的顺序。

    • 指定一个数值向量值以自定义输入维度顺序;例如,[4 3 1 2].有关示例,请参见使用导入的ONNX函数进行序列分类

    • 为多个输入指定一个单元格数组值;例如,{[3 2 1],'none'}

    “OutputDataPermutation”

    应用于输出的维度排序的排列Y,指定为“汽车”(默认),“没有”、数字向量或单元格数组。

    为名称-值对参数赋值“OutputDataPermutation”以匹配导入的ONNX模型的尺寸顺序。

    • 赋值“汽车”返回Y在深度学习工具箱排序。详情请参见自动输出数据排列

    • 赋值“没有”返回Y在ONNX排序。有关示例,请参见使用导入的ONNX函数进行序列分类

    • 指定一个数值向量值以自定义输出维度顺序;例如,[3 4 2 1]

    • 为多个输出指定一个单元格数组值;例如,{[3 2 1],'none'}

    输出参数
    论点 描述
    Y

    输出数据,作为数组或dlarray

    • 如果X是数组还是你用的ONNXFunction预测,Y是一个数组。

    • 如果X是一个dlarray或者你用ONNXFunction的培训,Y是一个dlarray

    状态

    已更新的网络状态,指定为结构。

    网络状态包含迭代之间被网络记住的信息,并在多个训练批之间更新。

    输入参数的解释X输出参数Y不同的模型可能有所不同。有关模型输入和输出参数的更多信息,请参阅帮助对于导入的模型函数NetworkFunctionName,或参考ONNX文档[1]

    导入模型函数的自动排列

    默认情况下,NetworkFunctionName自动排列输入和输出数据,以方便图像分类任务。自动排列可能不适合其他任务,如目标检测和时间序列分类。

    自动输入数据排列

    为了自动排列输入,NetworkFunctionName根据导入的ONNX网络指定的输入尺寸,假设如下:

    ONNX模型输入维数 输入数据的解释 ONNX标准尺寸排序 深度学习工具箱标准维度排序 输入的自动排列
    4 二维图像

    NCHW

    HW,C分别对应图像的高度、宽度和通道数,和N是观测的数量。

    HWCN

    HW,C分别对应图像的高度、宽度和通道数,和N是观测的数量。

    [4 3 1 2]

    如果输入维度的大小不是4,NetworkFunctionName指定输入参数“InputDataPermutation”作为“没有”

    自动输出数据排列

    为了自动排列输出,NetworkFunctionName根据导入的ONNX网络指定的输出维度,假设如下:

    ONNX模型输出维数 输出数据的解释 ONNX标准尺寸排序 深度学习工具箱标准维度排序 输出的自动排列
    2 二维图像分类评分

    NK

    K是班级的数量和N是观测的数量。

    KN

    K是班级的数量和N是观测的数量。

    [2 1]
    4 二维图像像素分类评分

    NKHW

    H而且W分别对应于图像的高度和宽度,K是班级的数量,和N是观测的数量。

    HWKN

    H而且W分别对应于图像的高度和宽度,K是班级的数量,和N是观测的数量。

    [3 4 2 1]

    如果输出维度的大小不是2或4,NetworkFunctionName指定输入参数“OutputDataPermutation”作为“没有”

    ONNX操作符importONNXFunction金宝app支持

    importONNXFunction金宝app支持以下ONNX操作符,但有一些限制。所支持的操作符与这些操作符进行比较金宝appimportONNXNetwork而且importONNXLayers转换为等效的内置MATLAB层。

    ONNX操作符金宝appimportONNXFunction importONNXNetwork而且importONNXLayers金宝app
    腹肌 没有

    添加

    是的
    没有
    ArgMax 没有

    AveragePool

    是的

    BatchNormalization

    是的
    没有
    装天花板 没有

    剪辑

    是的
    压缩 没有

    Concat

    是的

    常数

    是的
    ConstantOfShape 没有

    Conv

    是的

    ConvTranspose

    是的
    DepthToSpace 是的

    Div

    是的

    辍学

    是的
    平等的 没有
    经验值 没有
    扩大 没有

    是的
    地板上 没有
    收集 没有

    Gemm

    是的

    GlobalAveragePool

    是的

    更大的

    是的
    格勒乌 是的
    Hardmax 没有

    身份

    是的
    如果 没有
    InstanceNormalization 是的

    LeakyRelu

    是的
    没有
    LessOrEqual 没有
    日志 没有
    循环 没有

    LRN

    是的

    LSTM

    是的

    MatMul

    是的

    MaxPool

    是的

    Mul

    是的
    负的 没有
    NonMaxSuppression 没有
    非零 没有
    没有
    OneHot 没有
    没有
    没有
    战俘 没有

    PRelu

    是的
    RandomUniform 没有
    范围 没有
    互惠 没有
    ReduceMax 没有
    ReduceMean 没有
    ReduceMin 没有
    ReduceProd 没有
    ReduceSum 没有

    线性整流函数(Rectified Linear Unit)

    是的

    重塑

    是的
    调整 是的
    RoiAlign 没有
    没有
    扫描 没有
    散射 没有
    ScatterElements 没有
    SequenceAt 没有
    形状 没有

    乙状结肠

    是的
    没有

    Softmax

    是的
    SpaceToDepth 是的
    分裂 没有
    SplitToSequence 没有
    √6 没有
    挤压 没有

    是的

    总和

    是的

    双曲正切

    是的
    瓷砖 没有
    TopK 没有
    转置 没有
    Unsqueeze 没有
    Upsample 没有
    在哪里 没有

    提示

    • 请参阅每个模型的ONNX文档,以了解网络输入所需的预处理。例如,您需要调整大小(使用imresize),重新调节,并将输入图像归一化到使用ImageNet数据集训练的网络(如AlexNet, GoogleNet, ShuffleNet和SqueezeNet)。

    选择功能

    importONNXFunction当你不能导入预训练的ONNX网络时,使用importONNXNetwork.如果您想为预训练的网络生成代码,请使用importONNXLayers.使用查找并替换生成的占位符层findPlaceholderLayers而且replaceLayer,分别。然后,用assembleNetwork返回DAGNetwork对象。您可以为训练有素的对象生成代码DAGNetwork.有关最适合不同场景的导入函数的详细信息,请参见选择Function导入ONNX预训练网络

    参考文献

    [1]开放神经网络交换https://github.com/onnx/

    [2]ONNXhttps://onnx.ai/

    版本历史

    R2020b中介绍