主要内容

importONNXNetwork

进口pretrainedONNX网络

描述

例子

= importONNXNetwork (modelfile从文件中导入预训练的ONNX™(开放神经网络交换)网络modelfile.该函数返回网络作为一个DAGNetworkdlnetwork对象。

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

请注意

默认情况下,importONNXNetwork当软件无法将ONNX操作符转换为等效的内置MATLAB时,尝试生成自定义层®层。有关软件支持转换的运算符列表,请参见金宝appONNX操作符支持转换为内置M金宝appATLAB层

importONNXNetwork在包中保存生成的自定义层+modelfile

importONNXNetwork不会为每个不支持转换为内置MATLAB层的ONNX操作符自动生成自定义层。金宝app有关如何处理不受支持的层的更多信息,请参见金宝app选择功能

例子

= importONNXNetwork (modelfile名称=值导入预先训练好的ONNX网络,其中包含由一个或多个名称-值参数指定的附加选项。例如,OutputLayerType =“分类”导入网络为DAGNetwork对象,其中分类输出层附加到导入网络体系结构的第一个输出分支的末尾。

例子

全部折叠

下载并安装ONNX模型格式的深度学习工具箱转换器支持包。金宝app

类型importONNXNetwork在命令行。

importONNXNetwork

如果未安装ONNX模型格式的深度学习工具箱转换器,则该函数将在插件资源管理器中提供到所需支持包的链接。金宝app要安装支持包,请单击链接,然后金宝app单击安装.通过从模型文件导入网络,检查安装是否成功“simplenet.onnx”在命令行。如果安装了支持金宝app包,则函数返回一个DAGNetwork对象。

modelfile =“simplenet.onnx”;net = importONNXNetwork(modelfile)
net = DAGNetwork with properties: Layers: [9×1 nnet.cnn.layer.Layer] Connections: [8×2 table] InputNames: {'imageinput'} OutputNames: {'ClassificationLayer_softmax1002'}

绘制网络架构图。

情节(净)

导入预训练的ONNX网络作为DAGNetwork对象,并使用导入的网络对图像进行分类。

的ONNX模型squeezenet卷积神经网络。

挤压板=挤压板;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);

指定类名。

ClassNames = squeezeNet.Layers(end).Classes;

导入预训练的squeezeNet.onnx建模,并指定类。默认情况下,importONNXNetwork导入网络为DAGNetwork对象。

net = importONNXNetwork(“squeezeNet.onnx”、类=一会)
net = DAGNetwork with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}

分析导入的网络。

analyzeNetwork(净)

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

I = imread(“peppers.png”);大小(我)
ans =1×3384 512 3

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

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

使用导入的网络对图像进行分类。

分类(net,I)
标签=分类甜椒

导入预训练的ONNX网络作为dlnetwork对象,并使用导入的网络对图像进行分类。

的ONNX模型squeezenet卷积神经网络。

挤压板=挤压板;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);

指定类名。

ClassNames = squeezeNet.Layers(end).Classes;

导入预训练的squeezeNet.onnx模型作为dlnetwork对象。

net = importONNXNetwork(“squeezeNet.onnx”TargetNetwork =“dlnetwork”
net = dlnetwork with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] Learnables: [52×3 table] State: [0×3 table] InputNames: {'data'} OutputNames: {'probOutput'} Initialized: 1 .初始化

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

I = imread(“peppers.png”);大小(我)
ans =1×3384 512 3

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

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

将图像转换为adlarray.用尺寸格式化图像“SSCB”(空间,空间,通道,批次)。在这种情况下,批处理大小为1,您可以省略它(“SSC”).

I_dlarray = dlarray(single(I)),“SSCB”);

对样本图像进行分类,找到预测的标签。

prob = predict(net,I_dlarray);[~,label] = max(prob);

显示分类结果。

类名(标签)
ans =分类甜椒

导入预训练的ONNX网络作为DAGNetwork对象,并使用导入的网络对图像进行分类。导入的网络包含不支持转换为内置MATLAB层的ONNX操作符。金宝app当您导入这些操作符时,软件会自动生成自定义层。

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

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

modelfile =“shufflenet - 9. onnx”

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

挤压板=挤压板;ClassNames = squeezeNet.Layers(end).ClassNames;

进口shufflenet.默认情况下,importONNXNetwork导入网络为DAGNetwork对象。如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符,则金宝appimportONNXNetwork可以自动生成自定义层来代替这些操作符。importONNXNetwork将每个生成的自定义层保存为单独的.m包中的文件+ shufflenet_9在当前文件夹中。使用name-value参数指定包名PackageName

net = importONNXNetwork(modelfile,...类=一会PackageName =“shufflenet_9”
net = DAGNetwork with properties: Layers: [173×1 nnet.cnn.layer.Layer] Connections: [188×2 table] InputNames: {'gpu_0_data_0'} OutputNames: {'ClassificationLayer_gpu_0_softmax_1'}

使用helper函数查找自动生成的自定义层的索引findCustomLayers,并显示自定义图层。

ind = findCustomLayers(net。层,' + shufflenet_9 ');net.Layers(印第安纳州)
ans = 16×1带有图层的图层数组:1 'Reshape_To_ReshapeLayer1004' shufflenet_9。Reshape_To_ReshapeLayer1004 shufflenet_9。重塑_To_ReshapeLayer1004 2 'Reshape_To_ReshapeLayer1009' shufflenet_9.Reshape_To_ReshapeLayer1009 shufflenet_9.Reshape_To_ReshapeLayer1009 3 'Reshape_To_ReshapeLayer1014' shufflenet_9.Reshape_To_ReshapeLayer1014 shufflenet_9.Reshape_To_ReshapeLayer1014 4 'Reshape_To_ReshapeLayer1019' shufflenet_9.Reshape_To_ReshapeLayer1019 shufflenet_9.Reshape_To_ReshapeLayer1019 5 'Reshape_To_ReshapeLayer1024' shufflenet_9.Reshape_To_ReshapeLayer1024 shufflenet_9.Reshape_To_ReshapeLayer1024 6 'Reshape_To_ReshapeLayer1029' shufflenet_9.Reshape_To_ReshapeLayer1029 shufflenet_9.Reshape_To_ReshapeLayer1029 7 'Reshape_To_ReshapeLayer1034' shufflenet_9.Reshape_To_ReshapeLayer1034 shufflenet_9.Reshape_To_ReshapeLayer1034 8 'Reshape_To_ReshapeLayer1039' shufflenet_9.Reshape_To_ReshapeLayer1039 shufflenet_9.Reshape_To_ReshapeLayer1039 9 'Reshape_To_ReshapeLayer1044' shufflenet_9.Reshape_To_ReshapeLayer1044 shufflenet_9.Reshape_To_ReshapeLayer1044 10 'Reshape_To_ReshapeLayer1049' shufflenet_9.Reshape_To_ReshapeLayer1049 shufflenet_9.Reshape_To_ReshapeLayer1049 11 'Reshape_To_ReshapeLayer1054' shufflenet_9.Reshape_To_ReshapeLayer1054 shufflenet_9.Reshape_To_ReshapeLayer1054 12 'Reshape_To_ReshapeLayer1059' shufflenet_9.Reshape_To_ReshapeLayer1059 shufflenet_9.Reshape_To_ReshapeLayer1059 13 'Reshape_To_ReshapeLayer1064' shufflenet_9.Reshape_To_ReshapeLayer1064 shufflenet_9.Reshape_To_ReshapeLayer1064 14 'Reshape_To_ReshapeLayer1069' shufflenet_9.Reshape_To_ReshapeLayer1069 shufflenet_9.Reshape_To_ReshapeLayer1069 15 'Reshape_To_ReshapeLayer1074' shufflenet_9.Reshape_To_ReshapeLayer1074 shufflenet_9.Reshape_To_ReshapeLayer1074 16 'Reshape_To_ReshapeLayer1079' shufflenet_9.Reshape_To_ReshapeLayer1079 shufflenet_9.Reshape_To_ReshapeLayer1079

读取要分类的图像并显示图像的大小。图像是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(我)

使用导入的网络对图像进行分类。

分类(net,I)
标签=分类孔雀

Helper函数

介绍helper函数的代码findCustomLayers本例中使用。findCustomLayers返回指数自定义层的importONNXNetwork自动生成。

函数index = findCustomLayers(layers,PackageName) s = what([‘。’PackageName]);索引= 0(1,长度(s.m));I = 1:长度(层数)J = 1:长度(s.m)如果strcmpi(类(层(i)), [PackageName(2:结束)“。”S.m {j}(1:end-2)]) index (j) = i;结束结束结束结束

导入一个有多个输出的ONNX网络作为DAGNetwork对象。

指定ONNX模型文件并导入预训练的ONNX模型。默认情况下,importONNXNetwork导入网络为DAGNetwork对象。

modelfile =“digitsMIMO.onnx”;net = importONNXNetwork(modelfile)
net = DAGNetwork with properties: Layers: [19×1 nnet.cnn.layer.Layer] Connections: [19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}

网络有两个输出层:一个分类层(ClassificationLayer_sm_1),以分类数字及一个回归层(RegressionLayer_fc_1_Flatten),以计算数字预测角度的均方误差。绘制网络架构图。

情节(净)标题(“digitsMIMO网络体系结构”

要使用导入的网络进行预测,请使用预测函数,并设置ReturnCategorical选项真正的

输入参数

全部折叠

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

例子:“cifarResNet.onnx”

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

例子:importONNXNetwork (modelfile TargetNetwork =“dagnetwork GenerateCustomLayers = true, PackageName =“CustomLayers”)将网络导入modelfile作为一个DAGNetwork对象,并将自动生成的自定义层保存在包中+ CustomLayers在当前文件夹中。

自定义层生成选项,指定为数字或逻辑1真正的)或0).如果你设置GenerateCustomLayers真正的importONNXNetwork当软件无法将ONNX操作符转换为等效的内置MATLAB层时,尝试生成自定义层。importONNXNetwork将每个生成的自定义层保存为单独的.m文件中+PackageName.要查看或编辑自定义层,请打开相关的.m文件。有关自定义层的更多信息,请参见深度学习自定义层

例子:GenerateCustomLayers = false

所在包的名称importONNXNetwork保存自定义层,指定为字符向量或字符串标量。importONNXNetwork保存自定义图层包+PackageName在当前文件夹中。如果您没有指定PackageName,然后importONNXNetwork将自定义层保存在名为+modelfile在当前文件夹中。有关包的详细信息,请参见包创建命名空间

例子:PackageName = " shufflenet_9 "

例子:PackageName = " CustomLayers "

深度学习工具箱网络的目标类型,指定为“dagnetwork”“dlnetwork”.这个函数importONNXNetwork导入网络作为一个DAGNetworkdlnetwork对象。

  • 如果将网络导入为DAGNetwork对象,必须包括输入和输出层指定的ONNX模型或您指定使用名称-值参数InputDataFormatsOutputDataFormats,或OutputLayerType

  • 如果将网络导入为dlnetwork对象,importONNXNetwork附加一个CustomOutputLayer在每个输出分支的末端,并可能附加一个CustomInputLayer在输入分支的开头。该函数附加aCustomInputLayer如果输入数据格式或输入图像大小未知。类的属性,以获取有关这些层的数据格式的特定于网络的信息CustomInputLayer而且CustomOutputLayer对象。有关如何解释“深度学习工具箱”输入和输出数据格式的信息,请参见ONNX输入和输出张量转换为内置MATLAB层

例子:TargetNetwork = " dlnetwork "

网络输入的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXNetwork试图解释来自ONNX文件的输入数据格式。名称-值参数InputDataFormats是有用的importONNXNetwork无法导出输入数据格式。

InputDataFomats到ONNX输入张量的顺序的数据格式。例如,如果您指定InputDataFormats作为“BSSC”时,导入的网络有一个imageInputLayer输入。以获取更多信息importONNXNetwork解释了ONNX输入张量的数据格式以及如何指定InputDataFormats有关不同的深度学习工具箱输入层,请参见ONNX输入和输出张量转换为内置MATLAB层

如果指定了空数据格式([]""),importONNXNetwork自动解释输入数据格式。

例子:InputDataFormats = ' BSSC '

例子:InputDataFormats = " BSSC "

例子:InputDataFormats = [" bcs”、“”、“公元前”)

例子:InputDataFormats = {bcs,[],“公元前”}

数据类型:字符|字符串|细胞

网络输出的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXNetwork试图解释来自ONNX文件的输出数据格式。名称-值参数OutputDataFormats是有用的importONNXNetwork无法导出输出数据格式。

OutputDataFormats到ONNX输出张量顺序的数据格式。例如,如果您指定OutputDataFormats作为“公元前”时,导入的网络有一个classificationLayer输出。以获取更多信息importONNXNetwork解释了ONNX输出张量的数据格式以及如何指定OutputDataFormats有关不同的深度学习工具箱输出层,请参见ONNX输入和输出张量转换为内置MATLAB层

如果指定了空数据格式([]""),importONNXNetwork自动解释输出数据格式。

例子:公元前OutputDataFormats = ' '

例子:OutputDataFormats =“公元前”

例子:OutputDataFormats = [" bcs”、“”、“公元前”)

例子:OutputDataFormats = {bcs,[],“公元前”}

数据类型:字符|字符串|细胞

输入图像的大小为第一网络输入,指定为矢量的三个或四个对应的数值(高度、宽度、渠道)用于二维图像和(高度、宽度、深度、渠道)3d图像。网络仅当ONNX模型在时使用此信息modelfile不指定输入大小。

例子:ImageInputSize=[28 28 1]用于二维灰度输入图像

例子:ImageInputSize=[224 224 3]用于二维彩色输入图像

例子:ImageInputSize=[28 28 36 3]的三维彩色输入图像

第一个网络输出的层类型,指定为“分类”“回归”,或“pixelclassification”.这个函数importONNXNetwork附加一个ClassificationOutputLayerRegressionOutputLayer,或pixelClassificationLayer(计算机视觉工具箱)对象添加到导入网络体系结构的第一个输出分支的末尾。附加一个pixelClassificationLayer(计算机视觉工具箱)对象需要计算机视觉工具箱™。如果ONNX模型在modelfile指定输出层类型或您指定的TargetNetwork作为“dlnetwork”importONNXNetwork忽略名称-值参数OutputLayerType

例子:OutputLayerType = "回归"

类的输出层为第一个网络输出,指定为分类向量、字符串数组、单元格数组的字符向量或“汽车”.如果“汽车”,然后importONNXNetwork将类设置为分类(1:N),在那里N是类的数量。如果指定字符向量的字符串数组或单元格数组str,然后importONNXNetwork将输出层的类设置为分类(str, str).如果你指定TargetNetwork作为“dlnetwork”importONNXNetwork忽略名称-值参数

例子:类= {' 0 ',' 1 ',' 3 '}

例子:类=分类({‘狗’,‘猫’})

数据类型:字符|分类|字符串|细胞

常量折叠优化,指定为“深度”“浅”,或“没有”.常量折叠通过在ONNX运算符转换为等效的内置MATLAB层期间计算ONNX初始化器(初始常数值)上的操作来优化导入的网络架构。

如果ONNX网络包含运算符,软件无法将其转换为等效的内置MATLAB层(请参阅ONNX操作符支持转换为内置M金宝appATLAB层),不断的折叠优化可以减少不支持的层数。金宝app当你设置FoldConstants“深度”时,与将参数设置为时相比,网络具有相同或更少的不支持层金宝app“浅”.但是,网络导入时间可能会增加。集FoldConstants“没有”禁用网络结构优化功能。

如果经过不断的折叠优化,网络仍然包含不支持的层,金宝appimportONNXNetwork返回一个错误。此时,可以使用importONNXLayersimportONNXFunction.有关更多信息,请参见选择功能

例子:FoldConstants = "浅"

输出参数

全部折叠

预训练的ONNX网络,返回为DAGNetworkdlnetwork对象。

  • 指定TargetNetwork作为“dagnetwork”将网络导入为DAGNetwork对象。在DAGNetwork对象,然后使用分类函数。

  • 指定TargetNetwork作为“dlnetwork”将网络导入为dlnetwork对象。在dlnetwork对象,然后使用预测函数。将输入数据指定为dlarray使用正确的数据格式(有关详细信息,请参阅fmt的观点dlarray).

限制

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

    • 该函数支持ONNX中间表示金宝app版本7。

    • 该函数支持ONNX操作符集金宝app6 ~ 14。

请注意

如果导入导出的网络,重新导入的网络的层数可能与原始网络不同,可能不受支持。金宝app

更多关于

全部折叠

ONNX支持转换为内置的操作金宝app符MATLAB

importONNXNetwork金宝app支持以下ONNX运算符转换为内置的MATLAB层,但有一些限制。

ONNX运营商 深度学习工具箱层

添加

additionLayernnet.onnx.layer.ElementwiseAffineLayer

AveragePool

averagePooling1dLayeraveragePooling2dLayer

BatchNormalization

batchNormalizationLayer

Concat

concatenationLayer

常数

无(权重导入)

Conv

convolution1dLayerconvolution2dLayer

ConvTranspose

transposedConv2dLayer

辍学

dropoutLayer

Elu

eluLayer

Gemm

fullyConnectedLayer如果ONNX网络是循环的,否则nnet.onnx.layer.FlattenLayer紧随其后的是convolution2dLayer

GlobalAveragePool

globalAveragePooling1dLayerglobalAveragePooling2dLayer

GlobalMaxPool

globalMaxPooling1dLayerglobalMaxPooling2dLayer

格勒乌

gruLayer

InstanceNormalization

groupNormalizationLayernumGroups指定为“channel-wise”

LeakyRelu

leakyReluLayer

LRN

CrossChannelNormalizationLayer

LSTM

lstmLayerbilstmLayer

MatMul

fullyConnectedLayer如果ONNX网络是循环的,否则convolution2dLayer

MaxPool

maxPooling1dLayermaxPooling2dLayer

Mul

multiplicationLayer

线性整流函数(Rectified Linear Unit)

reluLayerclippedReluLayer

乙状结肠

sigmoidLayer

Softmax

softmaxLayer

总和

additionLayer

双曲正切

tanhLayer

如果importONNXNetwork进口的ConvONNX操作符作为convolution2dLayerConv运算符是一个只有两个元素的向量(p1, p2)importONNXNetwork设置填充选择convolution2dLayer(p1, p2, p1, p2)

ONNX运营商 ONNX进口商自定义层

剪辑

nnet.onnx.layer.ClipLayer

Div

nnet.onnx.layer.ElementwiseAffineLayer

nnet.onnx.layer.FlattenLayernnet.onnx.layer.Flatten3dLayer

身份

nnet.onnx.layer.IdentityLayer

ImageScaler

nnet.onnx.layer.ElementwiseAffineLayer

PRelu

nnet.onnx.layer.PReluLayer

重塑

nnet.onnx.layer.FlattenLayer

nnet.onnx.layer.ElementwiseAffineLayer
ONNX运营商 图像处理工具箱™
DepthToSpace depthToSpace2dLayer(图像处理工具箱)
调整 resize2dLayer(图像处理工具箱)resize3dLayer(图像处理工具箱)
SpaceToDepth spaceToDepthLayer(图像处理工具箱)
Upsample resize2dLayer(图像处理工具箱)resize3dLayer(图像处理工具箱)

转换ONNX输入和输出张量到内置MATLAB

importONNXNetwork尝试解释ONNX网络输入输出张量的数据格式,然后将其转换为内置的MATLAB输入输出层。具体解释请参见各表ONNX输入张量转换为深度学习工具箱层而且ONNX输出张量到MATLAB层的转换

在深度学习工具箱中,每个数据格式字符必须是以下标签之一:

  • 年代——空间

  • C——频道

  • B-批量观察

  • T-时间或顺序

  • U——未指明的

转换ONNX输入张量深度学习工具箱

数据格式 资料解释 深度学习工具箱层
输入张量 MATLAB输入格式 形状 类型
公元前 CB c——- - - - - -n数组,c是功能的数量和n是观测的数量 特性 featureInputLayer
bcsBSSCCSSSSC SSCB

h——- - - - - -w——- - - - - -c——- - - - - -n数字数组,其中hwc而且n图像的高度、宽度、通道数和观测次数是否分别为

二维图像 imageInputLayer
BCSSSBSSSC包括SSSC SSSCB

h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,其中hwdc而且n图像的高度、宽度、深度、通道数和图像观测数分别是

三维图像 image3dInputLayer
时间待定 认知行为治疗

c——- - - - - -年代——- - - - - -n矩阵,c是序列特征的数量,年代是序列长度,和n序列观测的数量是多少

向量序列 sequenceInputLayer
涂层 SSCBT

h——- - - - - -w——- - - - - -c——- - - - - -年代——- - - - - -n数组,hwc而且n分别对应图像的高度、宽度和通道数,年代是序列长度,和n图像序列观测的次数是多少

二维图像序列 sequenceInputLayer
TBCSSS SSSCBT

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代——- - - - - -n数组,hwd,c分别对应图像的高、宽、深、通道数,年代是序列长度,和n图像序列观测的次数是多少

三维图像序列 sequenceInputLayer

转换ONNX输出张量到MATLAB

数据格式 MATLAB层
输出张量 MATLAB输出格式
公元前时间待定 CB认知行为治疗 classificationLayer
bcsBSSCCSSSSCBCSSSBSSSC包括SSSC SSCBSSSCB pixelClassificationLayer(计算机视觉工具箱)
涂层TBCSSS SSCBTSSSCBT regressionLayer

为导入网络生成代码

你可以使用MATLAB编码器™或GPU Coder™与深度学习工具箱一起生成MEX,独立CPU, CUDA®MEX,或用于导入网络的独立CUDA代码。有关更多信息,请参见深度学习代码生成

  • 使用MATLAB编码器使用深度学习工具箱生成在桌面或嵌入式目标上运行的MEX或独立CPU代码。您可以部署生成的使用Intel的独立代码®MKL-DNN库或ARM®计算库。或者,您也可以生成不调用第三方库函数的通用C或c++代码。有关更多信息,请参见深度学习与MATLAB编码器(MATLAB编码器)

  • 使用GPU编码器与深度学习工具箱生成CUDA MEX或独立CUDA代码运行在桌面或嵌入式目标。您可以部署生成的独立CUDA代码,使用CUDA深度神经网络库(cuDNN)、TensorRT™高性能推断库或用于Mali GPU的ARM计算库。有关更多信息,请参见GPU编码器的深度学习(GPU编码器)

importONNXNetwork返回网络作为一个DAGNetworkdlnetwork对象。这两个对象都支持代码生成。金宝app欲知更多有关MATLAB编码器和GPU编码器对深度学习工具金宝app箱对象的支持,请参见金宝app支持类(MATLAB编码器)而且金宝app支持类(GPU编码器),分别。

您可以为任何导入的层支持代码生成的网络生成代码。金宝app获取支持使用的代码生成的层的列表金宝appMATLAB编码器和GPU Coder,参见金宝app支持层(MATLAB编码器)而且金宝app支持层(GPU编码器),分别。有关每个内置MATLAB层的代码生成功能和限制的更多信息,请参阅该层的扩展功能部分。例如,请参见代码生成而且GPU代码生成imageInputLayer

GPU使用导入网络

importONNXNetwork不会在GPU上执行。然而,importONNXNetwork导入预训练的神经网络进行深度学习DAGNetworkdlnetwork对象,你可以在GPU上使用。

  • 如果将网络导入为DAGNetwork对象,可以在CPU或GPU上使用导入的网络进行预测分类.使用name-value参数指定硬件需求ExecutionEnvironment.对于具有多个输出的网络,使用预测函数DAGNetwork对象。

  • 如果将网络导入为DAGNetwork对象,可以在CPU或GPU上使用导入的网络进行预测预测.使用name-value参数指定硬件需求ExecutionEnvironment.如果网络有多个输出,则指定name-value参数ReturnCategorical作为真正的

  • 如果将网络导入为dlnetwork对象,可以在CPU或GPU上使用导入的网络进行预测预测.这个函数预测如果输入数据或网络参数存储在GPU上,则在GPU上执行。

    • 如果你使用minibatchqueue要处理和管理输入数据的小批,可以使用minibatchqueue如果GPU可用,对象默认将输出转换为GPU数组。

    • 使用dlupdate转换a的可学习参数dlnetwork对象到GPU数组。

      net = dlupdate(@gpuArray,net)

  • 导入的网络可以在CPU或GPU上进行训练trainNetwork.若要指定培训选项,包括用于执行环境的选项,请使用trainingOptions函数。使用name-value参数指定硬件需求ExecutionEnvironment.有关如何加速训练的更多信息,请参见并行、gpu和云中扩展深度学习

使用GPU需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)

提示

  • 要使用预训练的网络对新图像进行预测或迁移学习,您必须以与用于训练导入模型的图像预处理相同的方式对图像进行预处理。最常见的预处理步骤是调整图像大小,减去图像平均值,并将图像从BGR图像转换为RGB。

    • 要调整图像大小,请使用imresize.例如,[3] 227227年imresize(图片)

    • 要将图像从RGB格式转换为BGR格式,请使用翻转.例如,翻转(图片3)

    有关用于训练和预测的图像预处理的更多信息,请参见用于深度学习的图像预处理

  • MATLAB使用基于1的索引,而Python®使用从零开始的索引。换句话说,在MATLAB和Python中,数组中的第一个元素的索引分别为1和0。有关MATLAB索引的更多信息,请参见数组索引.在MATLAB中,要使用一个索引数组(印第安纳州),将数组转换为印第安纳州+ 1

选择功能

ONNX模型格式的深度学习工具箱转换器提供三个功能导入预训练的ONNX网络:importONNXNetworkimportONNXLayers,importONNXFunction

如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符(请参阅金宝appONNX操作符支持转换为内置M金宝appATLAB层),importONNXNetwork不生成自定义层,然后importONNXNetwork返回一个错误。在这种情况下,您仍然可以使用importONNXLayers导入网络结构和权重或importONNXFunction将网络导入为ONNXParameters对象和模型函数。

有关导入函数最适合不同场景的详细信息,请参见选择Function导入ONNX预训练网络

参考文献

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

[2]ONNXhttps://onnx.ai/

版本历史

在R2018a中引入

全部展开

R2021b开始出现错误

R2021b的行为发生了变化

R2021b的行为发生了变化