unfreezeParameters
转换nonlearnable网络参数ONNXParameters
对可学的
描述
params = unfreezeParameters (
解冻指定的网络参数参数个数
,的名字
)的名字
在ONNXParameters
对象参数个数
。移动指定的参数的函数params.Nonlearnables
在输入参数参数个数
来params.Learnables
在输出参数参数个数
。
例子
火车进口ONNX函数使用自定义训练循环
导入squeezenet
卷积神经网络作为和微调pretrained网络传输函数学习新收集的图像进行分类。
这个示例使用一些辅助函数。要查看这些函数的代码,看看辅助函数。
解压缩和加载新的图像作为图像数据存储。imageDatastore
自动标签图像基于文件夹的名字和存储数据作为ImageDatastore
对象。图像数据存储可以存储大量图像数据,包括数据,并不适合在内存中,有效地阅读批图像卷积神经网络在训练。指定mini-batch大小。
解压缩(“MerchData.zip”);miniBatchSize = 8;imd = imageDatastore (“MerchData”,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”,…“ReadSize”,miniBatchSize);
这个数据集很小,包含75个训练图像。显示一些示例图像。
numImages =元素个数(imds.Labels);idx = randperm (numImages 16);图为i = 1:16次要情节(4 4 i) i = readimage (imd, idx (i));imshow(我)结束
提取训练集和一个炎热的编码分类分类标签。
XTrain = readall (imd);XTrain =单(cat (4, XTrain {:}));YTrain_categ =分类(imds.Labels);YTrain = onehotencode (YTrain_categ, 2) ';
确定数据的类的数量。
类=类别(YTrain_categ);numClasses =元素个数(类)
numClasses = 5
squeezenet
是一个卷积神经网络,训练图像从ImageNet数据库超过一百万。因此,网络学习丰富广泛的图像特征表示。网络可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。
导入pretrainedsqueezenet
网络作为一个函数。
squeezenetONNX () params = importONNXFunction (“squeezenet.onnx”,“squeezenetFcn”)
一个函数包含进口squeezenetFcn.m ONNX网络已经保存到文件。学习如何使用这个函数,类型:帮助squeezenetFcn。
params = ONNXParameters属性:可学的:[1×1 struct] Nonlearnables: [1×1 struct]状态:[1×1 struct] NumDimensions: [1×1 struct] NetworkFunctionName:“squeezenetFcn”
参数个数
是一个ONNXParameters
对象包含网络参数。squeezenetFcn
是一个函数,它包含网络体系结构模型。importONNXFunction
节省了squeezenetFcn
在当前文件夹。
计算的分类精度pretrained网络新的训练集。
accuracyBeforeTraining = getNetworkAccuracy (XTrain、YTrain params);流(' %。2 f精度转移之前学习\ n”,accuracyBeforeTraining);
0.01精度在转移之前的学习
精度很低。
显示可学的网络输入参数params.Learnables
。这些参数,如重量(W
)和偏见(B
更新)的卷积和完全连接层,通过网络在训练。培训期间Nonlearnable参数保持不变。
最后两个可学的pretrained网络参数配置为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);
冻结所有网络的参数,将它们转换为nonlearnable参数。因为你不需要计算梯度的冷冻层,冻结许多初始层的权重可以显著加快网络训练。
params = freezeParameters (params,“所有”);
解冻的最后两个参数网络将它们转换为可学的参数。
params = unfreezeParameters (params,“conv10_W”);params = unfreezeParameters (params,“conv10_B”);
现在的网络是为培训做好准备。初始化培训进展阴谋。
情节=“训练进步”;如果情节= =“训练进步”图lineLossTrain = animatedline;包含(“迭代”)ylabel (“损失”)结束
指定培训选项。
速度= [];numEpochs = 5;miniBatchSize = 16;numObservations =大小(YTrain, 2);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);initialLearnRate = 0.01;动量= 0.9;衰变= 0.01;
培训网络。
迭代= 0;开始=抽搐;executionEnvironment =“cpu”;变化百分比gpu上“gpu”训练。%循环时期。为时代= 1:numEpochs%洗牌数据。idx = randperm (numObservations);XTrain = XTrain (:,:,:, idx);YTrain = YTrain (:, idx);%在mini-batches循环。为i = 1: numIterationsPerEpoch迭代=迭代+ 1;% mini-batch读取的数据。idx =(张)* miniBatchSize + 1:我* miniBatchSize;X = XTrain (:,:,:, idx);Y = YTrain (:, idx);%如果训练在GPU,然后将数据转换成gpuArray。如果(executionEnvironment = =“汽车”& & canUseGPU) | | executionEnvironment = =“图形”X = gpuArray (X);结束%计算模型使用dlfeval和梯度和损失% modelGradients函数。(渐变、损失、状态)= dlfeval (@modelGradients, X, Y, params);参数个数。=状态;%确定基于时间的学习速率衰减学习速率的时间表。learnRate = initialLearnRate /(1 +衰变*迭代);%更新使用个优化网络参数。(参数。可学的,速度]= sgdmupdate (params.Learnables、渐变速度);%显示培训进展。如果情节= =“训练进步”D =持续时间(0,0,toc(开始),“格式”,“hh: mm: ss”);addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(”时代:“+时代+”,过去:“+ drawnow字符串(D))结束结束结束
调整后计算网络的分类精度。
accuracyAfterTraining = getNetworkAccuracy (XTrain、YTrain params);流(' %。2 f准确性后转移学习\ n”,accuracyAfterTraining);
1.00精度转移学习
辅助函数
本节提供的代码在这个例子中使用的辅助函数。
的getNetworkAccuracy
功能评估网络性能通过计算分类精度。
函数精度= getNetworkAccuracy (X, Y, onnxParams) N =大小(X, 4);onnxParams Ypred = squeezenetFcn (X,“培训”、假);[~,YIdx] = max (Y, [], 1);[~,YpredIdx] = max (Ypred [], 1);numIncorrect =总和(abs (YIdx-YpredIdx) > 0);精度= 1 - numIncorrect / N;结束
的modelGradients
函数计算损失和梯度。
函数(研究生、损失、状态)= modelGradients (X, Y, onnxParams) [Y,状态]= squeezenetFcn (X, onnxParams“培训”,真正的);损失= crossentropy (y y“DataFormat”,“CB”);研究生= dlgradient(损失、onnxParams.Learnables);结束
的squeezenetONNX
函数生成一个ONNX模型squeezenet
网络。
函数squeezenetONNX () exportONNXNetwork (squeezenet,“squeezenet.onnx”);结束
输入参数
参数个数
- - - - - -网络参数
ONNXParameters
对象
网络参数,指定为一个ONNXParameters
对象。参数个数
包含的网络参数导入ONNX™模型。
的名字
- - - - - -名称的参数来解冻
“所有”
|字符串数组
参数的名称解冻,指定为“所有”
或一个字符串数组。解冻所有nonlearnable参数设置的名字
来“所有”
。解冻k
nonlearnable参数通过定义的参数名称1 -k
字符串数组的名字
。
例子:[" gpu_0_sl_pred_b_0”、“gpu_0_sl_pred_w_0”)
数据类型:字符
|字符串
输出参数
参数个数
——网络参数
ONNXParameters
对象
网络参数,作为一个返回ONNXParameters
对象。参数个数
包含更新的网络参数unfreezeParameters
。
版本历史
Apri esempio
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
第一MATLAB
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano金宝app comandi MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。