导入ONNX格式的网络作为函数,修改网络参数。
导入pretrainedsimpleenet3fc.onnx.
网络作为一个函数。simplenet3fc.
是一个简单的卷积神经网络训练的数字图像数据。有关如何创建类似的网络的更多信息simplenet3fc.
, 看创建简单的图像分类网络.
进口simpleenet3fc.onnx.
使用importonnxfunction.
,它返回一个ONNXParameters
包含网络参数的对象。该函数还在包含网络架构的当前文件夹中创建新的模型函数。指定模型函数的名称simplenetFcn
.
包含导入的ONNX网络的函数已保存到文件simpleenetfcn.m文件中。要了解如何使用此功能,请键入:帮助simplenetfcn。
显示在培训期间更新的参数(参数个数。可学的
)和训练过程中保持不变的参数(params.nonlearnables.
).
ans =结构体字段:imageinput_Mean:[1×1 dlarray] conv_W:[5×5×1×20 dlarray] conv_B:[20×1 dlarray] batchnorm_scale:[20×1 dlarray] batchnorm_B:[20×1 dlarray] fc_1_W:[24×24×20×20 dlarray] fc_1_B:[20×1 dlarray] fc_2_W:[1×1×20×20 dlarray] fc_2_B:[20×1 dlarray] fc_3_W:[1×1×20×10 dlarray] fc_3_B:[10×1 dlarray]
ans =结构体字段:ConvStride1004:[2×1 dlarray] ConvDilationFactor1005:[2×1 dlarray] ConvPadding1006:[4×1 dlarray] ConvStride1007:[2×1 dlarray] ConvDilationFactor1008:[2×1 dlarray] ConvPadding1009:[4×1 dlarray] ConvStride1010:[2×1 dlarray] ConvDilationFactor1011:[2×1 dlarray] ConvPadding1012:[4×1 dlarray] ConvStride1013:[2×1 dlarray] ConvDilationFactor1014: [2×1 dlarray] ConvPadding1015: [4×1 dlarray]
网络的参数代表三个完全连接的层。您可以在原始参数中添加一个全连接层参数个数
在层之间fc_2
和fc_3
.新的层可能会提高分类精度。
来查看卷积层的参数fc_2
和fc_3
,打开模型功能simplenetFcn
.
向下滚动到函数中的层定义simplenetFcn
.下面的代码显示了层的定义fc_2
和fc_3
.
%conv:[权重,偏差,步幅,膨胀因子,填充,数据格式,numdim。fc_2] = prepareConvArgs (var。fc_2_W, var。fc_2_B, var。ConvStride1010, var。ConvDilationFactor1011, var。ConvPadding1012 1 NumDims。fc_1 NumDims.fc_2_W);var。fc_2= dlconv(Vars.fc_1, weights, bias,'走吧'步,“DilationFactor”dilationFactor,“填充”填充,“DataFormat”, dataFormat);%conv:[权重,偏见,阶段,稀释性因子,填充,dataformat,numdims.fc_3] = prepareConvargs(vars.fc_3_w,vars.fc_3_b,vars.convstride1013,vars.convdilationfactor1014,vars.convpaddation1014,5,numdims.fc_2,numdims.fc_3_w);vars.fc_3 = dlconv(vars.fc_2,权重,偏见,'走吧'步,“DilationFactor”dilationFactor,“填充”填充,“DataFormat”, dataFormat);
命名新图层fc_4
,因为每个添加的参数名称必须是唯一的。的addparameter.
函数总是顺序地向参数个数。可学的
或params.nonlearnables.
结构。模型函数中各层的顺序simplenetFcn
确定网络层执行的顺序。参数的名称和顺序不影响执行顺序。
添加一个新的完全连接的层fc_4
具有相同的参数fc_2
.
显示更新的可读和非可爱参数。
ans =结构体字段:imageinput_Mean:[1×1 dlarray] conv_W:[5×5×1×20 dlarray] conv_B:[20×1 dlarray] batchnorm_scale:[20×1 dlarray] batchnorm_B:[20×1 dlarray] fc_1_W:[24×24×20×20 dlarray] fc_1_B:[20×1 dlarray] fc_2_W:[1×1×20×20 dlarray] fc_2_B:[20×1 dlarray] fc_3_W:[1×1×20×10 dlarray] fc_3_B:[10×1 dlarray]fc_4_W: [1×1×20×20 dlarray] fc_4_B: [20×1 dlarray]
ans =结构体字段:ConvStride1004:[2×1 dlarray] ConvDilationFactor1005:[2×1 dlarray] ConvPadding1006:[4×1 dlarray] ConvStride1007:[2×1 dlarray] ConvDilationFactor1008:[2×1 dlarray] ConvPadding1009:[4×1 dlarray] ConvStride1010:[2×1 dlarray] ConvDilationFactor1011:[2×1 dlarray] ConvPadding1012:[4×1 dlarray] ConvStride1013:[2×1 dlarray] ConvDilationFactor1014: [2×1 dlarray] ConvPadding1015: [4×1 dlarray]fc_4_Stride: [2×1 dlarray] fc_4_DilationFactor: [2×1 dlarray] fc_4_Padding: [4×1 dlarray]
修改模型函数的体系结构以反映更改参数个数
因此,您可以使用网络与新参数或培训网络预测。打开模型功能simplenetFcn
.然后,添加完全连接的图层fc_4
在层之间fc_2
和fc_3
,并更改卷积操作的输入数据dlconv
对于第一层fc_3
到Vars.fc_4
.
下面的代码显示了新层fc_4
在它的位置,以及层数fc_2
和fc_3
.
%conv:[权重,偏差,步幅,膨胀因子,填充,数据格式,numdim。fc_2] = prepareConvArgs (var。fc_2_W, var。fc_2_B, var。ConvStride1010, var。ConvDilationFactor1011, var。ConvPadding1012 1 NumDims。fc_1 NumDims.fc_2_W);var。fc_2= dlconv(Vars.fc_1, weights, bias,'走吧'步,“DilationFactor”dilationFactor,“填充”填充,“DataFormat”, dataFormat);% Conv[权重,偏差,步幅,膨胀因子,填充,数据格式,numdim。fc_4] = prepareConvArgs (var。fc_4_W, var。fc_4_B, var。fc_4_Stride, Vars.fc_4_DilationFactor, Vars.fc_4_Padding, 1, NumDims.fc_2, NumDims.fc_4_W); Vars.fc_4 = dlconv(Vars.fc_2, weights, bias,'走吧'步,“DilationFactor”dilationFactor,“填充”填充,“DataFormat”, dataFormat);%conv:[权重,偏见,阶段,稀释,填充,dataformat,numdims.fc_3] = prepareConvargs(vars.fc_3_w,vars.fc_3_b,vars.convstride1013,vars.convdilationfactor1014,vars.convpaddationfactor1014,vars.convpadding1015,1,numdims.fc_4,numdims.fc_3_w);vars.fc_3 = dlconv(vars.fc_4,权重,偏差,'走吧'步,“DilationFactor”dilationFactor,“填充”填充,“DataFormat”, dataFormat);