主要内容

importONNXLayers

导入层ONNX网络

描述

例子

层数= importONNXLayers (模数从文件中导入onnx™(开放神经网络交换)网络的层模数.您可以在新数据集上培训导入的图层或将图层组装到准备预测的网络中。

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

例子

层数= importONNXLayers (模数名称,价值使用由一个或多个名称-值对参数指定的附加选项从ONNX网络导入层。

例如,importONNXLayers (modelfile ImportWeights,假)导入网络架构,不从文件中添加权重模数

例子

全部收缩

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

类型importONNXLayers在命令行。

importONNXLayers

如果ONNX模型格式的深度学习工具箱转换器未安装,那么该函数提供了在附加资源管理器中的所需支持包的链接。金宝app要安装支持包,请单击“链接”,金宝app然后单击安装.从模型文件导入网络检查安装是否成功'cifarresnet.onnx'在命令行。如果安装了支持金宝app包,则该函数返回aDagnetwork.目的。

modelfile ='cifarresnet.onnx';图层= importonnxLayers(模数,“OutputLayerType”“分类”
layers = LayerGraph with properties: layers: [77×1 net.cnn.layer. layer]连接:[85×2 table]

导入在CIFAR-10数据集上培训的剩余神经网络的体系结构和权重。指定包含ONNX网络的文件和要添加到导入的网络的输出层的类型。

modelfile ='cifarresnet.onnx';lgraph = importonnxLayers(模块,...“OutputLayerType”“分类”...'进口重量',真的)
LAGHAGH =具有属性的分层图:图层:[77×1 nnet.cnn.layer.layer]连接:[85×2表]输入名称:{'input_input'} OutputNames:{'classificationLayer_softmax'}

分析导入的网络结构。

analyzeNetwork (lgraph)

导入使用多个输出的ONNX网络importONNXLayers.函数为输出插入占位符层。导入后,您可以通过使用找到并替换占位符层FindPlaceHolderLayers.替换剂, 分别。

指定从中导入图层和权重的网络文件。

modelfile ='digitsmimo.onnx';

网络in.digitsmimo.onnx.有两个输出层:一个分类层分类的数字和一个回归层计算的均方误差的预测角度的数字。导入的层和权重模数

层= importONNXLayers ('digitsmimo.onnx''进口重量',真的)
警告:ONNX网络具有多个输出。importonnxlayers为输出插入占位符层。通过使用FindPlaceHolderLayers和RepliceLayer来查找并替换图层。
图层=具有属性的分层图:图层:[19×1 nnet.cnn.layer.layer]连接:[19×2表] InputNames:{'input_input'} OutputNames:{1×0小区}

importONNXLayers显示警告并为输出层插入占位符层。

使用图层图阴谋

情节(层)

图层图具有两个输出图层:Output_fc_1_Flattenoutput_sm_1..这两层是输出的占位符。您可以通过查看占位符层来查看属性或使用FindPlaceHolderLayers.功能。

图层.Layers.
ANS = 19×1层阵列,带有层:1'INPUT_INPUT'图像输入28×28×1图像2'CONC_1'卷积16 5×5×1卷绕升温[11]和填充[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'CONC_3'卷积32 3×3×16 convolutions with stride [2 2] and padding [1 1 1 1] 7 'BN_2' Batch Normalization Batch normalization with 32 channels 8 'relu_2' ReLU ReLU 9 'conv_4' Convolution 32 3×3×32 convolutions 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 'Output_sm_1' PLACEHOLDER LAYER Placeholder for 'Output' ONNX operator 18 'fc_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 19 'Output_fc_1_Flatten' PLACEHOLDER LAYER Placeholder for 'Output' ONNX operator
PlaceHolderLayers = FindPlaceHolderLayers(层)
placeholderLayers = 2×1 PlaceholderOutputLayer数组:1' Output_sm_1' PLACEHOLDER LAYER PLACEHOLDER for 'Output' ONNX operator 2 'Output_fc_1_Flatten' PLACEHOLDER LAYER PLACEHOLDER for 'Output' ONNX operator

创建输出层以替换占位符层。首先,使用名称创建一个分类层output_sm_1..指定输出层的类为0.1,......,9..如果未指定类,则软件会自动将其设置为12,......,N,在那里N是课程的数量。

Output1 = ClassificationLayer('名称'“Output_sm_1”'课程',字符串(0:9));

使用名称创建一个回归层Output_fc_1_Flatten

Output2 =回归线('名称'“Output_fc_1_Flatten”);

将占位符层替换为输出1输出2使用替换剂

图层=替换器(图层,“Output_sm_1”,输出1);图层=替换器(图层,“Output_fc_1_Flatten”, output2);

显示属性层图的确认替换。

图层.Layers.
ANS = 19×1层阵列,带有层:1'INPUT_INPUT'图像输入28×28×1图像2'CONC_1'卷积16 5×5×1卷绕升温[11]和填充[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'CONC_3'卷积32 3×3×16 convolutions with stride [2 2] and padding [1 1 1 1] 7 'BN_2' Batch Normalization Batch normalization with 32 channels 8 'relu_2' ReLU ReLU 9 'conv_4' Convolution 32 3×3×32 convolutions 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 'Output_sm_1' Classification Output crossentropyex with '0' and 9 other classes 18 'fc_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 19 'Output_fc_1_Flatten' Regression Output mean-squared-error

使用assembleNetwork.该函数返回一个Dagnetwork.准备用于预测的对象。

AdderBlynet = AssembLenetwork(图层)
[19×1 nnet.cnn.layer.Layer]连接:[19×2 table] InputNames: {'Input_input'} OutputNames: {'Output_sm_1' 'Output_fc_1_Flatten'}

输入参数

全部收缩

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

例子:'cifarresnet.onnx'

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:importONNXLayers (modelfile“OutputLayerType”、“分类”)从中导入网络层模数并在导入的图层末尾添加分类输出层的输出层。

函数附加到导入的网络体系结构末端的输出层类型,指定为“分类”“回归”,或'pixelclassification'.使用'pixelclassification'追加A.PixelclassificationLayer.(电脑视觉工具箱)对象(需要计算机Vision Toolbox™)。

如果一个网络模数有多个输出,那么您无法使用此参数指定输出层类型。importONNXLayers为输出插入占位符层。导入后,您可以通过使用找到并替换占位符层FindPlaceHolderLayers.替换剂, 分别。

例子:“OutputLayerType”、“回归”

指示要导入权重以及网络架构,指定为错误的要么真的

例子:“ImportWeights”,真的

数据类型:逻辑

输出参数

全部收缩

网络架构,返回AS分层图目的。

限制

  • importONNXLayers金宝app支持ONNX版本如下:

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

    • 该函数完全支持ONNX操作符集6、7、金宝app8和9。

    • 该功能为ONNX操作员设置10和11提供有限的支持。金宝app

笔记

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

更多关于

全部收缩

金宝app支持ONNX

importONNXLayers金宝app支持以下ONNX层,但有一些限制:

ONNX层 深度学习工具箱层

添加

附加学者要么nnet.onnx.layer.elementwiseaffinelayer.

AveragePool

averagePooling2dLayer

BatchNormalization

BatchnormalizationLayer.

Concat

concationlayer.

持续的

无(作为权重导入)

Conv*

Convolution2Dlayer.

ConvTranspose

TransposedConv2dlayer.

辍学

DropoutLayer.

elu.

elulayer.

Gemm

全康统计层如果ONNX网络是循环的,则为nnet.onnx.layer.FlattenLayer其次是Convolution2Dlayer.

GlobalaveragePool.

globalAveragePooling2dLayer

GlobalMaxpool.

globalmaxpooling2dlayer.

gru.

格拉勒

算法

GroupnormalizationLayer.numgroups.指定为“渠道明智”

leakyrelu.

漏滤网

LRN

CrossChannelNormalizationLayer

LSTM

lstmLayer要么Bilstmlayer.

MatMul

全康统计层如果ONNX网络是循环的,则为Convolution2Dlayer.

maxpool.

maxPooling2dLayer

Mul

multiplicationLayer

线性整流函数(Rectified Linear Unit)

抵押者要么clippedReluLayer

sigmoid.

sigmoidlayer.

softmax.

softmaxLayer

附加学者

塔尼

Tanhlayer.

*如果是的属性Conv操作员是只有两个元素的向量(p1, p2)importONNXLayers进口Conv作为一个Convolution2Dlayer.使用name-value参数“填充”指定为[P1,P2,P1,P2]

ONNX层 ONNX导入器自定义层

剪辑

nnet.onnx.layer.cliplayer.

div

nnet.onnx.layer.elementwiseaffinelayer.

扁平

nnet.onnx.layer.FlattenLayer要么nnet.onnx.layer.Flatten3dLayer

身份

nnet.onnx.layer.IdentityLayer

emotiomer

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网络包含一个层ONNX模型格式的深度学习工具箱转换器不支持(见金宝app金宝app支持ONNX层),然后importONNXLayers在不支持的层上插入一个占位符层。金宝app要查找网络中不支持的层的名称和索引,请使用金宝appFindPlaceHolderLayers.功能。然后,您可以用您定义的新图层替换占位符。更换层,使用替换剂.例如,看到具有多个输出的导入和组装ONNX网络

  • 您可以使用多个输入和多个输出导入ONNX网络。如果网络具有多个输入和单个输出,请使用importONNXNetwork.如果网络有多个输出,请使用importONNXLayers.的importONNXLayers函数为输出插入占位符层。导入后,您可以通过使用找到并替换占位符层FindPlaceHolderLayers.替换剂, 分别。例如,看到具有多个输出的导入和组装ONNX网络.要了解具有多个输入和多个输出的深度学习网络,请参阅多输入多输出网络

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

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

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

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

参考文献

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

[2]ONNXhttps://onnx.ai/

在R2018A介绍