主要内容

RMSProupdate

使用均方根传播(RMSProp)更新参数

描述

使用均方根传播(RMSProp)算法更新自定义训练循环中的网络可学习参数。

请注意

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

例子

数据链路averageSqGrad]=rmspropupdate(数据链路毕业生averageSqGrad更新网络的可学习参数数据链路使用RMSProp算法。在训练循环中使用此语法迭代地更新定义为dlnetwork对象

例子

参数个数averageSqGrad]=rmspropupdate(参数个数毕业生averageSqGrad中可学习参数的更新参数个数使用RMSProp算法。在训练循环中使用此语法以迭代方式更新使用函数定义的网络的可学习参数。

例子

___]=rmspropupdate(___学习者sqGradDecayε除了前面语法中的输入参数外,还指定用于全局学习速率、平方梯度衰减和小常数ε的值。

例子

全部崩溃

执行单个均方根传播更新步骤,全局学习率为0.05梯度衰减因子的平方0.95

将参数和参数梯度创建为数字数组。

参数=兰德(3,3,4);梯度=一(3,3,4);

初始化第一次迭代的平均平方梯度。

averageSqGrad=[];

指定全局学习速率和平方梯度衰减因子的自定义值。

learnRate = 0.05;sqGradDecay = 0.95;

使用RMSProupdate

[params, averageSqGrad] = rmspropupdate (params,研究生,averageSqGrad learnRate, sqGradDecay);

使用RMSProupdate使用均方根传播(RMSProp)算法训练网络。

负荷训练数据

加载数字训练数据。

[XTrain, YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses =元素个数(类);

定义网络

定义网络架构并指定图像平均值“的意思是”选项在图像输入层。

[imageInputLayer([28 28 1],]),“名字”“输入”“的意思是”意味着(XTrain 4)) convolution2dLayer(5年,20年“名字”“conv1”) reluLayer (“名字”“relu1”20岁的)convolution2dLayer (3“填充”,1,“名字”“conv2”) reluLayer (“名字”“relu2”20岁的)convolution2dLayer (3“填充”,1,“名字”“conv3”) reluLayer (“名字”“relu3”)完全连接层(NumClass,“名字”“fc”) softmaxLayer (“名字”“softmax”)]; lgraph=层图(层);

创建一个dlnetwork对象从层图。

dlnet = dlnetwork (lgraph);

定义模型梯度函数

创建helper函数modelGradients,列在示例的最后。函数接受dlnetwork对象数据链路以及一小批输入数据dlX与相应的标签Y,并返回损失和损失相对于中可学习参数的梯度数据链路

指定培训选项

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

miniBatchSize=128;numEpochs=20;numObservations=numel(YTrain);NumIteOptionsPerAppch=floor(numObservations./miniBatchSize);

在GPU上训练(如果有的话)。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱)

executionEnvironment =“汽车”

在一个情节中想象训练的进展。

情节=“培训进度”

列车网络的

使用自定义的训练循环训练模型。对于每个历元,洗牌数据并在小批量数据上循环。使用RMSProupdate功能。在每个历元结束时,显示训练进度。

初始化训练进度图。

如果阴谋==“培训进度”figure lineLossTrain=动画线(“颜色”[0.85 0.325 0.098]);ylim([0正])包含(“迭代”)伊拉贝尔(“损失”网格)在…上结束

初始化平方平均梯度。

averageSqGrad=[];

培训网络。

迭代= 0;开始=抽搐;历元=1:numEpochs%洗牌数据。idx=randperm(numel(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(@modelGradients,dlnet,dlX,Y);%使用RMSProp优化器更新网络参数。[dlnet,averageSqGrad]=RMSProupUpdate(dlnet,梯度,averageSqGrad);%显示训练进度。如果阴谋==“培训进度”D=持续时间(0,0,toc(开始),“格式”“hh: mm: ss”);addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(“时代:”+时代+”,过去:“+字符串(D)现在开始结束结束结束

测试网络

通过将测试集上的预测与真实标签进行比较,检验模型的分类精度。

[XTest, YTest] = digitTest4DArrayData;

将数据转换为dlarray与尺寸格式“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.9860

模型梯度函数

辅助函数modelGradients需要dlnetwork对象数据链路以及一小批输入数据dlX与相应的标签Y,并返回损失和损失相对于可学习参数的梯度数据链路.要自动计算梯度,请使用梯度函数。

作用[梯度,损失]=模型梯度(dlnet,dlX,Y)dlYPred=正向(dlnet,dlX);损失=交叉熵(dlYPred,Y);梯度=dlgradient(损失,dlnet.Learnables);结束

输入参数

全部崩溃

网络,指定为dlnetwork对象

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

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

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

  • 价值-参数的值,指定为包含dlarray

输入参数毕业生必须是与相同格式的表dlnet。可学的

网络可学习参数,指定为dlarray、数字数组、单元格数组、结构或表。

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

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

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

  • 价值-参数的值,指定为包含dlarray

您可以指定参数个数作为使用单元格数组、结构或表或嵌套单元格数组或结构的网络可学习参数的容器。单元格数组、结构或表中的可学习参数必须是dlarray或数据类型的数值仅有一个的

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

数据类型:仅有一个的||结构体|桌子|单间牢房

损失的梯度,指定为dlarray、数字数组、单元格数组、结构或表。

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

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

你可以获得毕业生从打电话到德尔费瓦尔对包含对的调用的函数求值梯度。有关详细信息,请参阅在深度学习工具箱中使用自动区分

参数梯度的平方的移动平均值,指定为一个空数组dlarray、数字数组、单元格数组、结构或表。

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

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

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

全局学习率,指定为一个正标量。的默认值学习者0.001

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

平方梯度衰减因子,指定为介于01.的默认值sqGradDecay0.9

用于防止被零除错误的小常数,指定为正标量。的默认值ε1 e-8

输出参数

全部崩溃

网络,返回为dlnetwork对象

该函数更新dlnet。可学的财产的dlnetwork对象

更新的网络可学习参数,返回为dlarray、数字数组、单元格数组、结构或具有价值变量,包含更新后的网络可学习参数。

更新的平方参数梯度的移动平均,返回为dlarray、数字数组、单元格数组、结构或表。

更多关于

全部崩溃

RMSProp

该函数使用均方根传播算法来更新可学习参数。有关更多信息,请参见下面的RMSProp算法的定义随机梯度下降法培训选项参考页面。

兼容性考虑

全部展开

R2020a中的行为发生了变化

扩展功能

介绍了R2019b