文档帮助中心文档
dlupdate
使用自定义功能更新参数
dlnet dlnet = dlupdate(有趣)
params, params = dlupdate(有趣)
[___) = dlupdate(有趣,___A1,…)
[___,x1,...,xm] = dlupdate(有趣,___)
例子
DLNET.= dlupdate(乐趣,DLNET.)更新节点的可学习参数dlnetwork对象DLNET.通过对函数求值乐趣将每个可学习参数作为输入。乐趣是接受一个形参数组作为输入参数并返回更新的形参数组的函数的句柄。
DLNET.= dlupdate(乐趣,DLNET.)
DLNET.
乐趣
dlnetwork
参数个数= dlupdate(乐趣,参数个数)中可学习参数的更新参数个数通过对函数求值乐趣将每个可学习参数作为输入。
参数个数= dlupdate(乐趣,参数个数)
参数个数
[___) = dlupdate (乐趣,___A1,......,一个)除了前面语法中的输入参数外,还指定了其他的输入参数乐趣是一个函数的函数句柄需要n + 1输入值。
[___) = dlupdate (乐趣,___A1,......,一个)
A1,......,一个
n + 1
[___,X1,…,Xm) = dlupdate (乐趣,___)返回多个输出X1,…,Xm当乐趣是返回的函数的函数句柄M + 1输出值。
[___,X1,…,Xm) = dlupdate (乐趣,___)
X1,…,Xm
M + 1
全部折叠
在参数梯度的结构上执行L1正则化。
创建示例输入数据。
dlX = dlarray (rand (100100 3),SSC的);
初始化卷积操作的可读参数。
Params.weights = Dlarray(Rand(10,10,3,50));params.bias = dlarray(rand(50,1));
使用辅助函数计算卷积操作的梯度COMPRADENTERS.,在本例的最后定义。
COMPRADENTERS.
梯度= dlfeval (@convGradients、dlX params);
定义正则化因子。
l1factor = 0.001;
创建一个正规化渐变的匿名函数。通过使用匿名功能将标量常量传递给函数,可以避免必须将常量值扩展到与参数变量相同的大小和结构。
L1Regularizer = @(grad,param) grad + L1Factor.*sign(param);
用dlupdate对每个梯度应用正则化函数。
梯度= dlupdate(l1regularizer,梯度,params);
梯度毕业生现在是根据函数规格化的吗L1Regularizer.
毕业生
L1Regularizer
COMPRADENTERS.功能
的COMPRADENTERS.辅助功能采用卷积操作的学习参数和迷你批次输入数据dlX,并返回相对于可学习参数的梯度。
dlX
功能= dlconv(dlX,params. weights,params. bias);海底=总和(海底,“所有”);梯度= dlgradient(海底,params);结束
用dlupdate使用自定义更新函数训练网络,该函数实现随机梯度下降算法(无动量)。
负载培训数据
加载数字训练数据。
[XTrain, YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses =元素个数(类);
定义网络
定义网络架构并指定图像平均值“的意思是”选项在图像输入层。
“的意思是”
[imageInputLayer([28 28 1],]),“名字”,“输入”,“的意思是”意味着(XTrain 4)) convolution2dLayer(5年,20年“名字”,'conv1') reluLayer (“名字”,“relu1”)卷积2dlayer(3,20,“填充”, 1“名字”,“conv2”) reluLayer (“名字”,'relu2')卷积2dlayer(3,20,“填充”, 1“名字”,'conv3') reluLayer (“名字”,'relu3')全连接列(numcrasses,“名字”,'fc') softmaxLayer (“名字”,'softmax')];Lgraph = LayerGraph(层);
创建一个dlnetwork对象从层图。
dlnet = dlnetwork (lgraph);
定义模型梯度函数
创建helper函数modelGradients,列在本例的最后。函数接受dlnetwork对象DLNET.和迷你输入数据dlX与相应的标签Y,并返回损失和损失相对于中可学习参数的梯度DLNET..
modelGradients
Y
定义随机梯度下降函数
创建helper函数sgdfunction.,列在本例的最后。的函数参数和参数,分别为一个可学习参数和损失相对于该参数的梯度,并使用随机梯度下降算法返回更新后的参数,表示为
sgdfunction.
参数
θ l + 1 = θ - α ∇ E ( θ l )
在哪里 l 为迭代数, α > 0 为学习速率, θ 是参数向量,和 E ( θ ) 为损失函数。
指定培训选项
指定在培训期间使用的选项。
minibatchsize = 128;numepochs = 30;numobservations = numel(ytrain);numiterationsperepoch =楼层(numobservations./minibatchsize);
指定学习率。
学习= 0.01;
在GPU上训练(如果有的话)。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱).
executionEnvironment =“汽车”;
在一个情节中想象训练的进展。
情节=“培训 - 进展”;
列车网络的
使用自定义训练循环训练模型。对于每个epoch,将数据和循环换掉迷你批次的数据。通过调用更新网络参数dlupdate与函数sgdfunction.在本例的最后定义。在每个纪元的末尾,展示训练的进展情况。
初始化培训进度情节。
如果plots ==“培训 - 进展”图lineloSstrain =动画线(“颜色”[0.85 0.325 0.098]);ylim([0正])包含(“迭代”)ylabel(“损失”网格)在结束
培训网络。
迭代= 0;开始=抽搐;为epoch = 1:numepochs%Shuffle数据。IDX = RANDPERM(NUMER(YTRAIN));XTrain = XTrain(:,:,:,IDX);YTrain = YTrain(IDX);为i = 1:numiterationsperepoch迭代=迭代+ 1;读取小批数据,并将标签转换为假%变量。idx =(张)* miniBatchSize + 1:我* miniBatchSize;X = XTrain (:,:,:, idx);Y = 0 (numClasses, miniBatchSize,“单一”);为c = 1:numClasses Y(c,YTrain(idx))==class (c)) = 1;结束%转换小批数据到美元。dlX = dlarray(单(X),“SSCB”);%如果在GPU上进行训练,则将数据转换为gpuArray。如果(executionEnvironment = =“汽车”&& canUseGPU) || executionEnvironment ==“GPU”dlx = gpuarray(dlx);结束%使用dlfeval和dlfeval评估模型渐变和损失%模型梯度辅助功能。[渐变,损失] = DLFeval(@ Maposgradients,Dlnet,DLX,Y);%使用中定义的SGD算法更新网络参数% sgdFunction辅助函数。updatefcn = @(dlnet,渐变)sgdfunction(dlnet,渐变,学习);dlnet = dlupdate(updatefcn,dlnet,渐变);%显示训练进度。如果plots ==“培训 - 进展”d =持续时间(0,0,toc(start),“格式”,“hh: mm: ss”);addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(“时代:”+时代+”,过去:“+字符串(d))绘制结束结束结束
测试网络
通过比较真实标签的测试集的预测来测试模型的分类准确性。
[XTest, YTest] = digitTest4DArrayData;
将数据转换为adlarray使用维度格式“SSCB”.对于GPU预测,也将数据转换为gpuArray.
dlarray
“SSCB”
gpuArray
dlXTest = dlarray (XTest,“SSCB”);如果(executionEnvironment = =“汽车”&& canUseGPU) || executionEnvironment ==“GPU”dlxtest = gpuarray(dlxtest);结束
对图像进行分类dlnetwork对象,使用预测函数并找到具有最高分的类。
预测
dlYPred =预测(dlnet dlXTest);[~, idx] = max (extractdata (dlYPred), [], 1);YPred =类(idx);
评估分类精度。
精度=意味着(YPred = =次)
精度= 0.9386
模型梯度函数
辅助函数modelGradients需要一个dlnetwork对象DLNET.和迷你输入数据dlX与相应的标签Y,并返回损失和损失相对于中可学习参数的梯度DLNET..要自动计算梯度,请使用dlgradient.函数。
dlgradient.
功能[梯度,损失] = Maposgradients(DLNET,DLX,Y)Dlypry =前进(DLNET,DLX);损失=联语(Dlypred,Y);梯度= Dlgradient(损失,DLNET.LEALNABLE);结束
随机梯度下降函数
辅助函数sgdfunction.接受可学习参数参数,即该参数相对于损耗的梯度坡度,以及学习速度学习,并使用随机梯度下降算法返回更新后的参数,表示为
坡度
学习
功能parameter = sgdFunction(parameter,gradient,learnRate);结束
函数,用于指定为函数句柄的可学习参数。
dlupdate评估乐趣使用每个网络被动参数作为输入。乐趣中的可学习参数数组被评估的次数等于DLNET.或者参数个数.
网络,指定为adlnetwork目的。
函数更新dlnet。可学的财产的dlnetwork目的。dlnet。可学的是一个包含三个变量的表:
dlnet。可学的
层- 图层名称,指定为字符串标量。
层
参数-参数名称,指定为字符串标量。
价值- 参数值,指定为包含一个单元数组dlarray.
价值
网络可学习参数,指定为dlarray,数字阵列,小区阵列,结构或表。
如果您指定参数个数作为一个表,它必须包含以下三个变量。
您可以指定参数个数作为使用单元格数组,结构或表或嵌套单元格阵列或结构的网络的可读参数的容器。必须是小区阵列,结构或表中的学习参数dlarray或数据类型的数值双或者单身的.
双
单身的
输入论点A1,......,一个必须提供完全相同的数据类型、顺序和字段(对于结构)或变量(对于表)参数个数.
数据类型:单身的|双|结构体|桌子|细胞
结构体
桌子
细胞
附加的输入参数乐趣,指定为dlarray对象、数字数组、单元格数组、结构或表价值多变的。
确切的形式A1,......,一个取决于输入网络或可学习参数。下表显示了所需的格式A1,......,一个可能的输入dlupdate.
网络,返回为dlnetwork目的。
函数更新dlnet。可学的财产的dlnetwork目的。
更新的网络可学习参数,返回为dlarray、数字数组、单元格数组、结构或具有价值变量,包含更新后的网络可学习参数。
函数的附加输出参数乐趣,在那里乐趣函数句柄是否为返回多个输出的函数dlarray对象、数字数组、单元格数组、结构或表价值多变的。
确切的形式X1,…,Xm取决于输入网络或可学习参数。的返回格式如下表所示X1,…,Xm可能的输入dlupdate.
使用注意事项及限制:
当以下输入参数中至少有一个是gpuArray或者dlarray使用类型的底层数据gpuArray,此功能在GPU上运行。
有关更多信息,请参见在GPU上运行MATLAB函数(并行计算工具箱).
dlnetwork|dlarray|adamupdate|rmspropupdate.|sgdmupdate|dlgradient.|dlfeval.
adamupdate
rmspropupdate.
sgdmupdate
dlfeval.
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,以便在可用的地方进行翻译内容,并查看本地活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系