importONNXLayers
从ONNX网络
描述
从文件中导入预训练的ONNX™(Open Neural Network Exchange)网络的层数和权重lgraph
= importONNXLayers (modelfile
)modelfile
.函数返回lgraph
作为一个LayerGraph
对象。DAGNetwork
或dlnetwork
对象。
importONNXLayers
要求ONNX模型格式的深度学习工具箱™转换器金宝app支持包。如果没有安装此支金宝app持包,则importONNXLayers
提供下载链接。
请注意
默认情况下,importONNXLayers
当软件无法将ONNX操作符转换为等效的内置MATLAB时,尝试生成自定义层®层。有关软件支持转换的运算符列表,请参见金宝appONNX操作符支持转换为内置M金宝appATLAB层.
importONNXLayers
在包中保存生成的自定义层+
.modelfile
importONNXLayers
不会为每个不支持转换为内置MATLAB层的ONNX操作符自动生成自定义层。金宝app有关如何处理不受支持的层的更多信息,请参见金宝app提示.
例子
下载并安装ONNX模型格式的深度学习工具箱转换器
下载并安装ONNX模型格式的深度学习工具箱转换器支持包。金宝app
类型importONNXLayers
在命令行。
importONNXLayers
如果未安装ONNX模型格式的深度学习工具箱转换器,则该函数将在插件资源管理器中提供到所需支持包的链接。金宝app要安装支持包,请单击链接,然后金宝app单击安装.通过从模型文件导入网络,检查安装是否成功“simplenet.onnx”
在命令行。如果安装了支持金宝app包,则函数返回一个LayerGraph
对象。
modelfile =“simplenet.onnx”;lgraph = importONNXLayers(modelfile)
lgraph = LayerGraph with properties: Layers: [9×1 nnet.cnn.layer.Layer] Connections: [8×2 table] InputNames: {'imageinput'} OutputNames: {'ClassificationLayer_softmax1002'}
绘制网络架构图。
情节(lgraph)
导入ONNX模型为层图兼容DAGNetwork
导入预训练的ONNX网络作为LayerGraph
对象。然后,将导入的图层组装成一个DAGNetwork
对象,并使用组装的网络对图像进行分类。
的ONNX模型squeezenet
卷积神经网络。
挤压板=挤压板;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);
指定模型文件和类名。
modelfile =“squeezenet.onnx”;ClassNames = squeezeNet.Layers(end).Classes;
导入ONNX网络的层数和权重。默认情况下,importONNXLayers
导入网络为LayerGraph
对象。DAGNetwork
对象。
lgraph = importONNXLayers(modelfile)
lgraph = LayerGraph with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}
分析导入的网络架构。
analyzeNetwork (lgraph)
显示导入网络的最后一层。输出显示层图有一个ClassificationOutputLayer
在网络架构的末尾。
lgraph.Layers(结束)
ans = ClassificationOutputLayer与属性:名称:'ClassificationLayer_prob'类:'auto' ClassWeights: 'none' OutputSize: 'auto'超参数LossFunction: 'crossentropyex'
分类层不包含类,因此必须在组装网络之前指定这些类。如果您没有指定类,那么软件将自动将类设置为1
,2
、……N
,在那里N
是类的数量。
分类层有名称“ClassificationLayer_prob”
.将类设置为一会
,然后将导入的分类层替换为新的分类层。
cLayer = lgraph.Layers(end);粘土。Classes = ClassNames; lgraph = replaceLayer(lgraph,“ClassificationLayer_prob”、粘土);
使用组合图层图assembleNetwork
返回DAGNetwork
对象。
net =汇编网络(lgraph)
net = DAGNetwork with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}
读取要分类的图像并显示图像的大小。图像是384 × 512像素,有三个颜色通道(RGB)。
I = imread(“peppers.png”);大小(我)
ans =1×3384 512 3
将图像大小调整为网络的输入大小。显示图像。
I = imresize(I,[227 227]);imshow(我)
使用导入的网络对图像进行分类。
分类(net,I)
标签=分类甜椒
导入ONNX模型为层图兼容dlnetwork
导入预训练的ONNX网络作为LayerGraph
对象。dlnetwork
对象。然后,将图层图转换为adlnetwork
对图像分类。
的ONNX模型squeezenet
卷积神经网络。
挤压板=挤压板;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);
指定模型文件和类名。
modelfile =“squeezenet.onnx”;ClassNames = squeezeNet.Layers(end).Classes;
导入ONNX网络的层数和权重。将网络导入为LayerGraph
对象。dlnetwork
对象。
lgraph = importONNXLayers(modelfile,TargetNetwork=“dlnetwork”)
lgraph = LayerGraph with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {1×0 cell}
读取要分类的图像并显示图像的大小。图像是384 × 512像素,有三个颜色通道(RGB)。
I = imread(“peppers.png”);大小(我)
ans =1×3384 512 3
将图像大小调整为网络的输入大小。显示图像。
I = imresize(I,[227 227]);imshow(我)
将导入的图层图转换为adlnetwork
对象。
Dlnet = dlnetwork(lgraph);
将图像转换为adlarray
.用尺寸格式化图像“SSCB”
(空间,空间,通道,批次)。在这种情况下,批处理大小为1,您可以省略它(“SSC”
)。
I_dlarray = dlarray(single(I)),“SSCB”);
对样本图像进行分类,找到预测的标签。
prob = predict(dlnet,I_dlarray);[~,label] = max(prob);
显示分类结果。
类名(标签)
ans =分类甜椒
导入ONNX模型图层图与自动生成的自定义图层
导入预训练的ONNX网络作为LayerGraph
对象,并将导入的层组装到DAGNetwork
对象。然后,使用DAGNetwork
对图像分类。导入的网络包含不支持转换为内置MATLAB层的ONNX操作符。金宝app当您导入这些操作符时,软件会自动生成自定义层。
本例使用helper函数findCustomLayers
.要查看此函数的代码,请参见Helper函数.
指定要导入的文件shufflenet
使用ONNX模型动物园的操作符集9。shufflenet
是一个卷积神经网络,它是在ImageNet数据库中的100多万张图像上进行训练的。因此,该网络已经学习了广泛图像的丰富特征表示。该网络可以将图像分为1000个对象类别,例如键盘、鼠标、铅笔和许多动物。
modelfile =“shufflenet - 9. onnx”;
导入的层和权重shufflenet
.默认情况下,importONNXLayers
导入网络为LayerGraph
对象。DAGNetwork
对象。如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符,则金宝appimportONNXLayers
可以自动生成自定义层来代替这些层。importONNXLayers
将每个生成的自定义层保存为单独的.m
包中的文件+ shufflenet_9
在当前文件夹中。使用name-value参数指定包名PackageName
.
lgraph = importONNXLayers(modelfile,PackageName=“shufflenet_9”)
lgraph = LayerGraph 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(lgraph。层,' + shufflenet_9 ');lgraph.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
分类层不包含类,因此必须在组装网络之前指定这些类。如果您没有指定类,那么软件将自动将类设置为1
,2
、……N
,在那里N
是类的数量。
导入类名squeezenet
,它也是用ImageNet数据库中的图像进行训练的。
挤压板=挤压板;classNames = SqueezeNet.Layers(end).ClassNames;
分类层粘土
是最后一层吗lgraph
.将类设置为一会
然后用新的分类层替换导入的分类层。
cLayer = lgraph.Layers(end)
cLayer = ClassificationOutputLayer与属性:名称:'ClassificationLayer_gpu_0_softmax_1'类:'auto' ClassWeights: 'none' OutputSize: 'auto'超参数LossFunction: 'crossentropyex'
粘土。Classes = classNames; lgraph = replaceLayer(lgraph,lgraph.Layers(end).Name,cLayer);
使用组合图层图assembleNetwork
.函数返回一个DAGNetwork
对象,该对象已准备用于预测。
net =汇编网络(lgraph)
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'}
读取要分类的图像并显示图像的大小。图像是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]);
使用导入的网络对图像进行分类。
分类(net,I)
标签=分类孔雀
Helper函数
介绍helper函数的代码findCustomLayers
本例中使用。findCustomLayers
返回指数
自定义层的importONNXLayers
自动生成。
函数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模型为层图与占位符层
导入一个ONNX长短期记忆(LSTM)网络作为层图,然后找到并替换placholder层。LSTM网络使您能够将序列数据输入到网络中,并基于序列数据的单个时间步长进行预测。
lstmNet
有一个类似于LSTM网络的架构使用深度学习的序列分类.lstmNet
被训练来识别说话人,给定时间序列数据,代表连续说出两个日语元音。
指定lstmNet
作为模型文件。
modelfile =“lstmNet.onnx”;
导入ONNX网络的层数和权重。默认情况下,importONNXLayers
导入网络为LayerGraph
对象。DAGNetwork
对象。
lgraph = importONNXLayers(“lstmNet.onnx”)
警告:无法导入某些ONNX操作符,因为它们不受支持。金宝app它们已被占位符层所取代。为了找到这些层,在返回的对象上调用findPlaceholderLayers函数。1个操作符:无法为ONNX网络输出“softmax1001”创建输出层,因为其数据格式未知或MATLAB输出层不支持。金宝app如果您知道它的格式,可以使用'OutputDataFormats'参数传递它。要将ONNX网络作为函数导入,请使用importONNXFunction。
lgraph = LayerGraph with properties: Layers: [6×1 nnet.cnn.layer.Layer] Connections: [5×2 table] InputNames: {'sequenceinput'} OutputNames: {1×0 cell}
importONNXLayers
显示警告并为输出层插入占位符层。
属性来检查占位符层层
的属性lgraph
或者使用findPlaceholderLayers
函数。
lgraph。层
ans = 6×1带有图层的层数组:1 'sequenceinput' Sequence Input序列输入12维序列输入2 'lstm1000' LSTM LSTM 100个隐藏单元3 'fc_MatMul' Fully Connected 9 Fully Connected Layer 4 'fc_Add' Elementwise Affine应用Elementwise缩放,然后对输入进行加法。5' flat_to_softmaxlayer1005 ' lstmNet。Flatten_To_SoftmaxLayer1005 lstmNet。平_To_SoftmaxLayer1005 6 'OutputLayer_softmax1001' PLACEHOLDER LAYER Placeholder for 'added_outputLayer' ONNX operator
placeholderLayers = findPlaceholderLayers(lgraph)
placeholderLayers = PlaceholderLayer with properties: Name: 'OutputLayer_softmax1001' ONNXNode: [1×1 struct] Weights: [] learable Parameters无属性。状态参数无属性。显示所有属性
创建一个输出层来替换占位符层。首先,用名称创建一个分类层OutputLayer_softmax1001
.如果您没有指定类,那么软件将自动将它们设置为1
,2
、……N
,在那里N
是类的数量。在这种情况下,类数据是标签“1”,“2”,…“9”,对应9个说话者。
outputLayer =分类层(“名字”,“OutputLayer_softmax1001”);
将占位符层替换为outputLayer
通过使用replaceLayer
函数。
lgraph =替换层(lgraph,“OutputLayer_softmax1001”, outputLayer);
显示层
属性层图确认替换。
lgraph。层
ans = 6×1带有图层的层数组:1 'sequenceinput' Sequence Input序列输入12维序列输入2 'lstm1000' LSTM LSTM 100个隐藏单元3 'fc_MatMul' Fully Connected 9 Fully Connected Layer 4 'fc_Add' Elementwise Affine应用Elementwise缩放,然后对输入进行加法。5' flat_to_softmaxlayer1005 ' lstmNet。Flatten_To_SoftmaxLayer1005 lstmNet。平_To_SoftmaxLayer1005 6 'OutputLayer_softmax1001' Classification Output crossentropyex
方法在导入层图时定义输出层OutputLayerType
或OutputDataFormats
选择。检查导入的图层图是否有占位符层findPlaceholderLayers
.
lgraph1 = importONNXLayers(“lstmNet.onnx”OutputLayerType =“分类”);findPlaceholderLayers (lgraph1)
ans = 0×1带有属性的图层数组:
lgraph2 = importONNXLayers(“lstmNet.onnx”OutputDataFormats =“公元前”);findPlaceholderLayers (lgraph2)
ans = 0×1带有属性的图层数组:
导入的图层图lgraph1
而且lgraph2
不要有占位符层。
导入和组装多输出ONNX网络
导入多输出的ONNX网络importONNXLayers
,然后将导入的图层图组装成DAGNetwork
对象。
指定要从中导入层和权重的网络文件。
modelfile =“digitsMIMO.onnx”;
导入图层和权重modelfile
.美国的网络digitsMIMO.onnx
有两个输出层:一个分类层(ClassificationLayer_sm_1
),以分类数字及一个回归层(RegressionLayer_fc_1_Flatten
),以计算数字预测角度的均方误差。
lgraph = importONNXLayers(modelfile)
lgraph = LayerGraph with properties: Layers: [19×1 nnet.cnn.layer.Layer] Connections: [19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}
绘制层图使用情节
,并显示的层次lgraph
.
情节(lgraph)
lgraph。层
ans = 19×1带有图层的图层数组:1的输入图像输入28××28日1图片2的conv_1卷积16 5×5×1的隆起与步幅[1]和填充(2 2 2 2)3的BN_1批量标准化批量标准化与16通道4的relu_1 ReLU ReLU 5‘conv_2卷积32 1×1×16旋转步(2 - 2)和填充[0 0 0 0]6‘conv_3卷积32 3×3×16旋转步(2 - 2)和填充[1 1 1 1]7“BN_2”批量标准化批量标准化32通道8 ' relu_2 ReLU ReLU 9 conv_4的卷积32 3×3×32convolutions with stride [1 1] and padding [1 1 1 1] 10 'BN_3' Batch Normalization Batch normalization with 32 channels 11 'relu_3' ReLU ReLU 12 'plus_1' Addition Element-wise addition of 2 inputs 13 'fc_1' Convolution 1 14×14×32 convolutions with stride [1 1] and padding [0 0 0 0] 14 'fc_2' Convolution 10 14×14×32 convolutions with stride [1 1] and padding [0 0 0 0] 15 'sm_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 16 'sm_1' Softmax softmax 17 'fc_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 18 'ClassificationLayer_sm_1' Classification Output crossentropyex 19 'RegressionLayer_fc_1_Flatten' Regression Output mean-squared-error
分类层不包含类,因此必须在组装网络之前指定这些类。如果您没有指定类,那么软件将自动将类设置为1
,2
、……N
,在那里N
是类的数量。指定的类粘土
作为0
,1
、……9
.然后,用新的分类层替换导入的分类层。
ClassNames = string(0:9);cLayer = lgraph.Layers(18);粘土。Classes = ClassNames; lgraph = replaceLayer(lgraph,“ClassificationLayer_sm_1”、粘土);
使用组合图层图assembleNetwork
.函数返回一个DAGNetwork
对象,该对象已准备用于预测。
assembledNet = assembleNetwork(lgraph)
assembledNet = DAGNetwork with properties: Layers: [19×1 nnet.cnn.layer.Layer] Connections: [19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}
输入参数
modelfile
- - - - - -ONNX模型文件名称
特征向量|字符串标量
包含网络的ONNX模型文件的名称,指定为字符向量或字符串标量。该文件必须在当前文件夹或MATLAB路径下的文件夹中,或者必须包含该文件的完整或相对路径。
例子:“cifarResNet.onnx”
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
例子:importONNXLayers (modelfile TargetNetwork =“dagnetwork GenerateCustomLayers = true, PackageName =“CustomLayers”)
导入网络层modelfile
作为与层图兼容的DAGNetwork
对象,并将自动生成的自定义层保存在包中+ CustomLayers
在当前文件夹中。
GenerateCustomLayers
- - - - - -自定义层生成选项
真正的
或1
(默认)|假
或0
自定义层生成选项,指定为数字或逻辑1
(真正的
)或0
(假
)。如果你设置GenerateCustomLayers
来真正的
,importONNXLayers
当软件无法将ONNX操作符转换为等效的内置MATLAB层时,尝试生成自定义层。importONNXLayers
将每个生成的自定义层保存为单独的.m
文件中+
.要查看或编辑自定义层,请打开相关的PackageName
.m
文件。有关自定义层的更多信息,请参见深度学习自定义层.
例子:GenerateCustomLayers = false
TargetNetwork
- - - - - -深度学习工具箱网络的目标类型
“dagnetwork”
(默认)|“dlnetwork”
导入网络架构的“深度学习工具箱”网络的目标类型,指定为“dagnetwork”
或“dlnetwork”
.这个函数importONNXLayers
导入网络体系结构为LayerGraph
对象。DAGNetwork
或dlnetwork
对象。
如果你指定
TargetNetwork
作为“dagnetwork”
,进口的lgraph
必须包括输入和输出层指定的ONNX模型或您指定使用名称-值参数InputDataFormats
,OutputDataFormats
,或OutputLayerType
.如果你指定
TargetNetwork
作为“dlnetwork”
,importONNXLayers
附加一个CustomOutputLayer
在每个输出分支的末端lgraph
,并可能附加一个CustomInputLayer
在输入分支的开头。该函数附加aCustomInputLayer
如果输入数据格式或输入图像大小未知。类的属性,以获取有关这些层的数据格式的特定于网络的信息CustomInputLayer
而且CustomOutputLayer
对象。有关如何解释“深度学习工具箱”输入和输出数据格式的信息,请参见ONNX输入和输出张量转换为内置MATLAB层.
例子:TargetNetwork = " dlnetwork "
进口LayerGraph
对象。dlnetwork
对象。
InputDataFormats
- - - - - -网络输入的数据格式
特征向量|字符串标量|字符串数组
网络输入的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXLayers
试图解释来自ONNX文件的输入数据格式。名称-值参数InputDataFormats
是有用的importONNXLayers
无法导出输入数据格式。
集InputDataFomats
到ONNX输入张量的顺序的数据格式。例如,如果您指定InputDataFormats
作为“BSSC”
时,导入的网络有一个imageInputLayer
输入。以获取更多信息importONNXLayers
解释了ONNX输入张量的数据格式以及如何指定InputDataFormats
有关不同的深度学习工具箱输入层,请参见ONNX输入和输出张量转换为内置MATLAB层.
如果指定了空数据格式([]
或""
),importONNXLayers
自动解释输入数据格式。
例子:InputDataFormats = ' BSSC '
例子:InputDataFormats = " BSSC "
例子:InputDataFormats = [" bcs”、“”、“公元前”)
例子:InputDataFormats = {bcs,[],“公元前”}
数据类型:字符
|字符串
|细胞
OutputDataFormats
- - - - - -网络输出的数据格式
特征向量|字符串标量|字符串数组
网络输出的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXLayers
试图解释来自ONNX文件的输出数据格式。名称-值参数OutputDataFormats
是有用的importONNXLayers
无法导出输出数据格式。
集OutputDataFormats
到ONNX输出张量顺序的数据格式。例如,如果您指定OutputDataFormats
作为“公元前”
时,导入的网络有一个classificationLayer
输出。以获取更多信息importONNXLayers
解释了ONNX输出张量的数据格式以及如何指定OutputDataFormats
有关不同的深度学习工具箱输出层,请参见ONNX输入和输出张量转换为内置MATLAB层.
如果指定了空数据格式([]
或""
),importONNXLayers
自动解释输出数据格式。
例子:公元前OutputDataFormats = ' '
例子:OutputDataFormats =“公元前”
例子:OutputDataFormats = [" bcs”、“”、“公元前”)
例子:OutputDataFormats = {bcs,[],“公元前”}
数据类型:字符
|字符串
|细胞
ImageInputSize
- - - - - -第一个网络输入的输入图像的大小
两个或三个数值的向量
输入图像的大小为第一网络输入,指定为矢量的三个或四个对应的数值(高度、宽度、渠道)
用于二维图像和(高度、宽度、深度、渠道)
3d图像。网络仅当ONNX模型在时使用此信息modelfile
不指定输入大小。
例子:ImageInputSize=[28 28 1]
用于二维灰度输入图像
例子:ImageInputSize=[224 224 3]
用于二维彩色输入图像
例子:ImageInputSize=[28 28 36 3]
的三维彩色输入图像
OutputLayerType
- - - - - -第一个网络输出的层类型
“分类”
|“回归”
|“pixelclassification”
第一个网络输出的层类型,指定为“分类”
,“回归”
,或“pixelclassification”
.这个函数importONNXLayers
附加一个ClassificationOutputLayer
,RegressionOutputLayer
,或pixelClassificationLayer
(计算机视觉工具箱)对象添加到导入网络体系结构的第一个输出分支的末尾。附加一个pixelClassificationLayer
(计算机视觉工具箱)对象需要计算机视觉工具箱™。如果ONNX模型在modelfile
指定输出层类型或您指定的TargetNetwork
作为“dlnetwork”
,importONNXLayers
忽略名称-值参数OutputLayerType
.
例子:OutputLayerType = "回归"
FoldConstants
- - - - - -常数折叠优化
“深度”
(默认)|“浅”
|“没有”
常量折叠优化,指定为“深度”
,“浅”
,或“没有”
.常量折叠通过在ONNX运算符转换为等效的内置MATLAB层期间计算ONNX初始化器(初始常数值)上的操作来优化导入的网络架构。
如果ONNX网络包含运算符,软件无法将其转换为等效的内置MATLAB层(请参阅ONNX操作符支持转换为内置M金宝appATLAB层),然后importONNXLayers
在每个不受支持的层中插入一个占位符层。金宝app有关更多信息,请参见提示.
不断的折叠优化可以减少占位符层的数量。当你设置FoldConstants
来“深度”
,与将参数设置为时相比,导入的层包含相同或更少的占位符层“浅”
.但是,导入时间可能会增加。集FoldConstants
来“没有”
禁用网络结构优化功能。
例子:FoldConstants = "浅"
输出参数
lgraph
-预训练ONNX模型的网络架构
LayerGraph
对象
网络架构的预训练ONNX模型,返回作为LayerGraph
对象。
要使用导入的层图进行预测,必须转换LayerGraph
对象的DAGNetwork
或dlnetwork
对象。指定名称-值参数TargetNetwork
作为“dagnetwork”
或“dlnetwork”
取决于预期的工作流。
限制
importONNXLayers
金宝app支持以下ONNX版本:该函数支持ONNX中间表示金宝app版本7。
该函数支持ONNX操作符集金宝app6 ~ 14。
请注意
如果导入导出的网络,重新导入的网络的层数可能与原始网络不同,可能不受支持。金宝app
更多关于
ONNX支持转换为内置的操作金宝app符MATLAB层
importONNXLayers
金宝app支持以下ONNX运算符转换为内置的MATLAB层,但有一些限制。
ONNX运营商 | 深度学习工具箱层 |
---|---|
|
additionLayer 或nnet.onnx.layer.ElementwiseAffineLayer |
|
averagePooling1dLayer 或averagePooling2dLayer |
|
batchNormalizationLayer |
|
concatenationLayer |
|
无(权重导入) |
|
convolution1dLayer 或convolution2dLayer |
|
transposedConv2dLayer |
|
dropoutLayer |
|
eluLayer |
|
fullyConnectedLayer 如果ONNX网络是循环的,否则nnet.onnx.layer.FlattenLayer 紧随其后的是convolution2dLayer |
|
globalAveragePooling1dLayer 或globalAveragePooling2dLayer |
|
globalMaxPooling1dLayer 或globalMaxPooling2dLayer |
|
gruLayer |
|
groupNormalizationLayer 与numGroups 指定为“channel-wise” |
|
leakyReluLayer |
|
CrossChannelNormalizationLayer |
|
lstmLayer 或bilstmLayer |
|
fullyConnectedLayer 如果ONNX网络是循环的,否则convolution2dLayer |
|
maxPooling1dLayer 或maxPooling2dLayer |
|
multiplicationLayer |
|
reluLayer 或clippedReluLayer |
|
sigmoidLayer |
|
|
|
additionLayer |
|
tanhLayer |
*如果importONNXLayers
进口的Conv
ONNX操作符作为convolution2dLayer
和Conv
运算符是一个只有两个元素的向量(p1, p2)
,importONNXLayers
设置填充
选择convolution2dLayer
来(p1, p2, p1, p2)
.
ONNX运营商 | ONNX进口商自定义层 |
---|---|
|
nnet.onnx.layer.ClipLayer |
|
nnet.onnx.layer.ElementwiseAffineLayer |
|
nnet.onnx.layer.FlattenLayer 或nnet.onnx.layer.Flatten3dLayer |
|
nnet.onnx.layer.IdentityLayer |
|
nnet.onnx.layer.ElementwiseAffineLayer |
|
nnet.onnx.layer.PReluLayer |
|
nnet.onnx.layer.FlattenLayer |
|
nnet.onnx.layer.ElementwiseAffineLayer |
ONNX运营商 | 图像处理工具箱™ |
---|---|
DepthToSpace |
depthToSpace2dLayer (图像处理工具箱) |
调整 |
resize2dLayer (图像处理工具箱)或resize3dLayer (图像处理工具箱) |
SpaceToDepth |
spaceToDepthLayer (图像处理工具箱) |
Upsample |
resize2dLayer (图像处理工具箱)或resize3dLayer (图像处理工具箱) |
转换ONNX输入和输出张量到内置MATLAB层
importONNXLayers
尝试解释ONNX网络输入输出张量的数据格式,然后将其转换为内置的MATLAB输入输出层。具体解释请参见各表ONNX输入张量转换为深度学习工具箱层而且ONNX输出张量到MATLAB层的转换.
在深度学习工具箱中,每个数据格式字符必须是以下标签之一:
年代
——空间C
——频道B
-批量观察T
-时间或顺序U
——未指明的
转换ONNX输入张量深度学习工具箱层
数据格式 | 资料解释 | 深度学习工具箱层 | ||
---|---|---|---|---|
输入张量 | MATLAB输入格式 | 形状 | 类型 | |
公元前 |
CB |
c——- - - - - -n数组,c是功能的数量和n是观测的数量 | 特性 | featureInputLayer |
bcs ,BSSC ,CSS ,SSC |
SSCB |
h——- - - - - -w——- - - - - -c——- - - - - -n数字数组,其中h,w,c而且n图像的高度、宽度、通道数和观测次数是否分别为 |
二维图像 | imageInputLayer |
BCSSS ,BSSSC ,包括 ,SSSC |
SSSCB |
h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,其中h,w,d,c而且n图像的高度、宽度、深度、通道数和图像观测数分别是 |
三维图像 | image3dInputLayer |
时间待定 |
认知行为治疗 |
c——- - - - - -年代——- - - - - -n矩阵,c是序列特征的数量,年代是序列长度,和n序列观测的数量是多少 |
向量序列 | sequenceInputLayer |
涂层 |
SSCBT |
h——- - - - - -w——- - - - - -c——- - - - - -年代——- - - - - -n数组,h,w,c而且n分别对应图像的高度、宽度和通道数,年代是序列长度,和n图像序列观测的次数是多少 |
二维图像序列 | sequenceInputLayer |
TBCSSS |
SSSCBT |
h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代——- - - - - -n数组,h,w,d,c分别对应图像的高、宽、深、通道数,年代是序列长度,和n图像序列观测的次数是多少 |
三维图像序列 | sequenceInputLayer |
转换ONNX输出张量到MATLAB层
数据格式 | MATLAB层 | |
---|---|---|
输出张量 | MATLAB输出格式 | |
公元前 ,时间待定 |
CB ,认知行为治疗 |
classificationLayer |
bcs ,BSSC ,CSS ,SSC ,BCSSS ,BSSSC ,包括 ,SSSC |
SSCB ,SSSCB |
pixelClassificationLayer (计算机视觉工具箱) |
涂层 ,TBCSSS |
SSCBT ,SSSCBT |
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编码器).
importONNXLayers
返回网络架构lgraph
作为一个LayerGraph
对象。对于代码生成,必须首先转换导入的LayerGraph
对象添加到网络。把一个LayerGraph
对象的DAGNetwork
或dlnetwork
对象,使用assembleNetwork
或dlnetwork
.欲知更多有关MATLAB编码器和GPU编码器对深度学习工具金宝app箱对象的支持,请参见金宝app支持类(MATLAB编码器)而且金宝app支持类(GPU编码器),分别。
您可以为任何导入的层支持代码生成的网络生成代码。金宝app获取支持使用的代码生成的层的列表金宝appMATLAB编码器和GPU Coder,参见金宝app支持层(MATLAB编码器)而且金宝app支持层(GPU编码器),分别。有关每个内置MATLAB层的代码生成功能和限制的更多信息,请参阅该层的扩展功能部分。例如,请参见代码生成而且GPU代码生成的imageInputLayer
.
在GPU上使用导入网络层
importONNXLayers
不会在GPU上执行。然而,importONNXLayers
导入深度学习预训练神经网络的层LayerGraph
对象,你可以在GPU上使用。
转换导入的
LayerGraph
对象的DAGNetwork
对象,使用assembleNetwork
.在DAGNetwork
对象,然后您可以通过使用预测CPU或GPU上的类标签分类
.使用name-value参数指定硬件需求ExecutionEnvironment
.对于具有多个输出的网络,使用预测
函数并指定名称-值参数ReturnCategorical
作为真正的
.转换导入的
LayerGraph
对象的dlnetwork
对象,使用dlnetwork
.在dlnetwork
对象,然后您可以通过使用预测CPU或GPU上的类标签预测
.这个函数预测
如果输入数据或网络参数存储在GPU上,则在GPU上执行。如果你使用
minibatchqueue
要处理和管理输入数据的小批,可以使用minibatchqueue
如果GPU可用,对象默认将输出转换为GPU数组。使用
dlupdate
转换a的可学习参数dlnetwork
对象到GPU数组。net = dlupdate(@gpuArray,net)
你可以培训进口的
LayerGraph
对象在CPU或GPU上使用trainNetwork
.若要指定培训选项,包括用于执行环境的选项,请使用trainingOptions
函数。使用name-value参数指定硬件需求ExecutionEnvironment
.有关如何加速训练的更多信息,请参见并行、gpu和云中扩展深度学习.
使用GPU需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱).
提示
如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符(请参阅金宝appONNX操作符支持转换为内置M金宝appATLAB层),
importONNXLayers
不生成自定义层,然后importONNXLayers
在不受支持的层中插入一个占位符层。金宝app要查找网络中不支持的层的名称和索引,请使用金宝appfindPlaceholderLayers
函数。然后,您可以将占位符层替换为您定义的新层。要替换一个图层,请使用replaceLayer
.有关示例,请参见导入和组装多输出ONNX网络.要使用预训练的网络对新图像进行预测或迁移学习,您必须以与用于训练导入模型的图像预处理相同的方式对图像进行预处理。最常见的预处理步骤是调整图像大小,减去图像平均值,并将图像从BGR图像转换为RGB。
有关用于训练和预测的图像预处理的更多信息,请参见用于深度学习的图像预处理.
MATLAB使用基于1的索引,而Python®使用从零开始的索引。换句话说,在MATLAB和Python中,数组中的第一个元素的索引分别为1和0。有关MATLAB索引的更多信息,请参见数组索引.在MATLAB中,要使用一个索引数组(
印第安纳州
),将数组转换为印第安纳州+ 1
.
选择功能
ONNX模型格式的深度学习工具箱转换器提供三个功能导入预训练的ONNX网络:importONNXNetwork
,importONNXLayers
,importONNXFunction
.有关导入函数最适合不同场景的详细信息,请参见选择Function导入ONNX预训练网络.
版本历史
在R2018a中引入R2021b:ImportWeights
选项已被删除
R2021b开始警告
ImportWeights
已被删除。从R2021b开始,自动导入ONNX模型权重。在大多数情况下,您不需要对代码进行任何更改。
如果
ImportWeights
不是在代码中设置的,importONNXLayers
现在导入权重。如果
ImportWeights
设置为真正的
的行为importONNXLayers
保持不变。如果
ImportWeights
设置为假
在你的代码中,importONNXLayers
现在忽略名称-值参数ImportWeights
并导入权重。
R2021b:importONNXLayers
不能创建输入和输出层ONNX文件信息
R2021b的行为发生了变化
如果你导入一个ONNX模型作为LayerGraph
对象。DAGNetwork
对象时,导入的层图必须包括输入层和输出层。importONNXLayers
尝试将输入和输出ONNX张量转换为内置的MATLAB层。导入一些网络时,其中importONNXLayers
以前可以导入输入和输出内置的MATLAB层,importONNXLayers
现在可以插入占位符层。在这种情况下,执行以下操作之一来更新代码:
指定名称-值参数
TargetNetwork
作为“dlnetwork”
将网络导入为LayerGraph
对象。dlnetwork
对象。使用名称-值参数
InputDataFormats
,OutputDataFormats
,OutputLayerType
指定导入网络的输入和输出。使用
importONNXFunction
将网络作为模型函数导入ONNXParameters
对象。
R2021b:导入的层名称可能不同
R2021b的行为发生了变化
导入的层图的层名可能与以前的版本不同。要更新代码,请将现有的层名替换为新的名称或lgraph.Layers (n) . name
.
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。