文档帮助中心
sgdmupdate
使用随机动量梯度下降(SGDM)更新参数
[DLNET,VEL] = SGDMUPDATE(DLNET,GRAC,VEL)
(params,韦尔)= sgdmupdate (params,研究生,韦尔)
[___] = sgdmupdate(___learnRate动力)
在自定义训练循环中使用随机梯度动量下降(SGDM)算法更新网络可学习参数。
此功能适用于SGDM优化算法以更新使用定义为的网络的自定义培训循环中的网络参数dlnetwork对象或模型函数。如果你想训练一个网络定义为层数组或作为一个LayerGraph,使用以下功能:
dlnetwork
层
LayerGraph
创建一个TrainingOptionsSGDM.对象使用培训选项函数。
TrainingOptionsSGDM.
培训选项
使用TrainingOptionsSGDM.对象的trainNetwork函数。
trainNetwork
例子
[DLNET.,韦尔] = sgdmupdate(DLNET.,毕业,韦尔)更新网络的可知参数DLNET.使用SGDM算法。在训练循环中使用此语法迭代地更新定义为dlnetwork目的。
[DLNET.,韦尔] = sgdmupdate(DLNET.,毕业,韦尔)
DLNET.
韦尔
毕业
[参数个数,韦尔] = sgdmupdate(参数个数,毕业,韦尔)更新可知参数参数个数使用SGDM算法。在训练循环中使用此语法,迭代地更新使用函数定义的网络的可学习参数。
[参数个数,韦尔] = sgdmupdate(参数个数,毕业,韦尔)
参数个数
[___] = sgdmupdate(___学习,势头)除了前面语法中的输入参数外,还指定要用于全局学习速率和动量的值。
[___] = sgdmupdate(___学习,势头)
学习
势头
全部折叠
以全局学习率执行单个SGDM更新步骤0.05和动量的0.95.
0.05
0.95
将参数和参数梯度创建为数字数组。
Params = Rand(3,3,4);毕业=那些(3,3,4);
初始化第一次迭代的参数速度。
韦尔= [];
为全局学习率和势头指定自定义值。
学习= 0.05;动量= 0.95;
使用sgdmupdate.
(params,韦尔)= sgdmupdate (params,研究生,或者,learnRate,动量);
采用sgdmupdate使用SGDM算法训练网络。
负载培训数据
加载数字训练数据。
[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')];Lgraph = LayerGraph(层);
创建一个dlnetwork对象从层图。
dlnet = dlnetwork (lgraph);
定义模型梯度函数
创建helper函数modelGradients,列在示例的末尾。该功能需要一个dlnetwork对象DLNET.和迷你批次输入数据dlX与相应的标签Y,并返回损失和损失相对于中可学习参数的梯度DLNET..
modelGradients
dlX
Y
指定培训选项
指定在培训期间使用的选项。
minibatchsize = 128;numepochs = 20;numobservations = numel(ytrain);numiterationsperepoch = bloor(numobservation./minibatchsize);
在GPU上训练(如果有的话)。使用GPU需要并行计算工具箱™和支持CUDA®的NVIDIA®GPU,其计算能力为3.0或更高。
executionEnvironment =“汽车”;
初始化速度参数。
初始化培训进度情节。
情节=“培训 - 进展”;如果plots ==“培训 - 进展”迭代= 1;图线轴杆=动画线;Xlabel(“总迭代”)ylabel(“损失”)结束
列车网络的
使用自定义训练循环训练模型。对于每个epoch,将数据和循环扫描迷你批次数据。使用使用的网络参数更新网络参数sgdmupdate函数。在每个时代结束时,显示培训进度。
为epoch = 1:numepochs%洗牌数据。IDX = RANDPERM(NUMER(YTrain));XTrain = XTrain(:,:,idx);YTrain = Ytrain(IDX);为i = 1:numitrationsperepoch读取小批数据,并将标签转换为假%变量。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 (@modelGradients, dlnet dlX Y);%使用SGDM Optimizer更新网络参数。[dlnet,韦尔]= sgdmupdate (dlnet,研究生,韦尔);%显示训练进度。如果plots ==“培训 - 进展”addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(《训练中的失落:时代-》+时代+“;迭代 - ”+ i) drawnow iteration = iteration + 1;结束结束结束
测试网络
通过比较真实标签的测试集上的预测来测试模型的分类准确性。
[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.9914
模型梯度函数
的modelGradientsHelper函数接受dlnetwork对象DLNET.和迷你批次输入数据dlX与相应的标签Y,并返回损失和损失相对于中可学习参数的梯度DLNET..要自动计算梯度,请使用dlgradient函数。
dlgradient
功能[梯度,损失] = MaposGRADENTERS(DLNET,DLX,Y)DLYPRED =前进(DLNET,DLX);Dlypry = softmax(dlypred);损失=联肾上腺素(Dlypred,Y);梯度= DLGRADIET(损失,DLNET.LEALNABLE);结束
网络,指定为adlnetwork目的。
函数更新dlnet。可学的财产的dlnetwork目的。dlnet。可学的是一个包含三个变量的表:
dlnet。可学的
层- 图层名称,指定为字符串标量。
参数-参数名称,指定为字符串标量。
参数
价值- 参数值,指定为包含一个单元格数组dlarray.
价值
输入论点毕业必须是与之相同的表格dlnet。可学的.
网络可学习参数,指定为dlarray,数字阵列,小区阵列,结构或表。
如果您指定参数个数作为一个表,它必须包含以下三个变量。
您可以指定参数个数作为使用单元格阵列,结构或表或嵌套单元格阵列或结构的网络的可读参数的容器。必须是单元格阵列,结构或表中的学习参数dlarray或数据类型的数值双要么单身的.
双
单身的
输入论点毕业必须提供完全相同的数据类型、顺序和字段(对于结构)或变量(对于表)参数个数.
数据类型:单身的|双|结构体|表格|细胞
结构体
表格
细胞
损失的梯度,指定为adlarray,数字阵列,小区阵列,结构或表。
确切的形式毕业取决于输入网络或可学习参数。下表显示了所需的格式毕业可能的输入sgdmupdate.
你可以获得毕业拨打dlfeval.这会评估包含呼叫的函数dlgradient.有关更多信息,请参阅在深度学习工具箱中使用自动区分.
dlfeval.
[]
参数velocity,指定为空数组,adlarray,数字阵列,小区阵列,结构或表。
确切的形式韦尔取决于输入网络或可学习参数。下表显示了所需的格式韦尔可能的输入sgdmpdate.
sgdmpdate
如果您指定韦尔作为空数组,该函数不假设先前的速度,并以与一系列迭代中的第一个更新相同的方式运行。要迭代更新可学习的参数,请使用韦尔的前一个调用的输出sgdmupdate随着韦尔输入。
0.01
学习率,指定为一个正标量。的默认值学习是0.01.
如果指定网络参数为dlnetwork对象中,每个参数的学习率为全局学习率乘以网络层中定义的相应学习率因子属性。
0.9
0
1
势头,指定为正标量0和1.的默认值势头是0.9.
网络,返回为dlnetwork目的。
函数更新dlnet。可学的财产的dlnetwork目的。
更新的网络可学习参数,返回为dlarray,数字阵列,小区阵列,结构或表格价值变量,包含更新后的网络可学习参数。
更新的参数速度,作为a返回dlarray,数字阵列,小区阵列,结构或表。
该函数使用随机梯度下降与动量算法来更新可读参数。有关详细信息,请参阅随机算法的随机梯度下降的定义随机梯度下降法在培训选项参考页面。
使用注意事项及限制:
当以下输入参数中至少有一个是GPUArray.或者一个dlarray使用类型的底层数据GPUArray.,此功能在GPU上运行。
有关更多信息,请参阅在GPU上运行MATLAB函数(并行计算工具箱)。
adamupdate|dlarray|dlfeval.|dlgradient|dlnetwork|dlupdate|向前|rmspropupdate.
adamupdate
dlupdate
向前
rmspropupdate.
在您的系统中存在这个示例的修改版本。你想打开这个版本吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
选择一个网站,以便在可用的地方进行翻译的内容,并查看本地活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系