sgdmupdate

使用随机动量梯度下降(SGDM)更新参数

描述

在自定义训练循环中使用随机梯度动量下降(SGDM)算法更新网络可学习参数。

请注意

此功能适用于SGDM优化算法以更新使用定义为的网络的自定义培训循环中的网络参数dlnetwork对象或模型函数。如果你想训练一个网络定义为数组或作为一个LayerGraph,使用以下功能:

例子

DLNET.韦尔] = sgdmupdate(DLNET.毕业韦尔更新网络的可知参数DLNET.使用SGDM算法。在训练循环中使用此语法迭代地更新定义为dlnetwork目的。

例子

参数个数韦尔] = sgdmupdate(参数个数毕业韦尔更新可知参数参数个数使用SGDM算法。在训练循环中使用此语法,迭代地更新使用函数定义的网络的可学习参数。

例子

___] = sgdmupdate(___学习势头除了前面语法中的输入参数外,还指定要用于全局学习速率和动量的值。

例子

全部折叠

以全局学习率执行单个SGDM更新步骤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.

指定培训选项

指定在培训期间使用的选项。

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.

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函数。

功能[梯度,损失] = MaposGRADENTERS(DLNET,DLX,Y)DLYPRED =前进(DLNET,DLX);Dlypry = softmax(dlypred);损失=联肾上腺素(Dlypred,Y);梯度= DLGRADIET(损失,DLNET.LEALNABLE);结束

输入参数

全部折叠

网络,指定为adlnetwork目的。

函数更新dlnet。可学的财产的dlnetwork目的。dlnet。可学的是一个包含三个变量的表:

  • - 图层名称,指定为字符串标量。

  • 参数-参数名称,指定为字符串标量。

  • 价值- 参数值,指定为包含一个单元格数组dlarray

输入论点毕业必须是与之相同的表格dlnet。可学的

网络可学习参数,指定为dlarray,数字阵列,小区阵列,结构或表。

如果您指定参数个数作为一个表,它必须包含以下三个变量。

  • - 图层名称,指定为字符串标量。

  • 参数-参数名称,指定为字符串标量。

  • 价值- 参数值,指定为包含一个单元格数组dlarray

您可以指定参数个数作为使用单元格阵列,结构或表或嵌套单元格阵列或结构的网络的可读参数的容器。必须是单元格阵列,结构或表中的学习参数dlarray或数据类型的数值要么单身的

输入论点毕业必须提供完全相同的数据类型、顺序和字段(对于结构)或变量(对于表)参数个数

数据类型:单身的||结构体|表格|细胞

损失的梯度,指定为adlarray,数字阵列,小区阵列,结构或表。

确切的形式毕业取决于输入网络或可学习参数。下表显示了所需的格式毕业可能的输入sgdmupdate

输入 可学的参数 梯度
DLNET. 表格dlnet。可学的包含参数, 和价值变量。的价值变量由包含每个可学习参数的单元格数组组成dlarray 具有相同数据类型、变量和顺序的表dlnet。可学的毕业必须有一个价值由单元阵列组成的变量,其中包含每个可学习参数的梯度。
参数个数 dlarray dlarray具有相同的数据类型和顺序参数个数
数字数组 具有相同数据类型和顺序的数字数组参数个数
单元阵列 具有相同的数据类型、结构和顺序的单元格数组参数个数
结构 结构,具有相同的数据类型、字段和顺序参数个数
参数, 和价值变量。的价值变量必须由包含每个可学习参数的单元格数组组成dlarray 具有相同数据类型、变量和顺序的表参数个数毕业必须有一个价值由单元阵列组成的变量,其中包含每个可学习参数的梯度。

你可以获得毕业拨打dlfeval.这会评估包含呼叫的函数dlgradient.有关更多信息,请参阅在深度学习工具箱中使用自动区分

参数velocity,指定为空数组,adlarray,数字阵列,小区阵列,结构或表。

确切的形式韦尔取决于输入网络或可学习参数。下表显示了所需的格式韦尔可能的输入sgdmpdate

输入 可学的参数 速度
DLNET. 表格dlnet。可学的包含参数, 和价值变量。的价值变量由包含每个可学习参数的单元格数组组成dlarray 具有相同数据类型、变量和顺序的表dlnet。可学的韦尔必须有一个价值可变由包含每个学习参数的速度的单元阵列组成。
参数个数 dlarray dlarray具有相同的数据类型和顺序参数个数
数字数组 具有相同数据类型和顺序的数字数组参数个数
单元阵列 具有相同的数据类型、结构和顺序的单元格数组参数个数
结构 结构,具有相同的数据类型、字段和顺序参数个数
参数, 和价值变量。的价值变量必须由包含每个可学习参数的单元格数组组成dlarray 具有相同数据类型、变量和顺序的表参数个数韦尔必须有一个价值可变由包含每个学习参数的速度的单元阵列组成。

如果您指定韦尔作为空数组,该函数不假设先前的速度,并以与一系列迭代中的第一个更新相同的方式运行。要迭代更新可学习的参数,请使用韦尔的前一个调用的输出sgdmupdate随着韦尔输入。

学习率,指定为一个正标量。的默认值学习0.01

如果指定网络参数为dlnetwork对象中,每个参数的学习率为全局学习率乘以网络层中定义的相应学习率因子属性。

势头,指定为正标量01.的默认值势头0.9

输出参数

全部折叠

网络,返回为dlnetwork目的。

函数更新dlnet。可学的财产的dlnetwork目的。

更新的网络可学习参数,返回为dlarray,数字阵列,小区阵列,结构或表格价值变量,包含更新后的网络可学习参数。

更新的参数速度,作为a返回dlarray,数字阵列,小区阵列,结构或表。

更多关于

全部折叠

随机梯度下降,动量

该函数使用随机梯度下降与动量算法来更新可读参数。有关详细信息,请参阅随机算法的随机梯度下降的定义随机梯度下降法培训选项参考页面。

扩展能力

介绍了R2019b