rmspropupdate

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

描述

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

注意

此功能适用的RMSProp优化算法来更新网络参数定制培训循环,即利用网络定义为dlnetwork对象或模型函数。如果你想训练定义为一个网络数组或者LayerGraph,可使用以下功能:

[dlnetaverageSqGrad) = rmspropupdate (dlnet研究生averageSqGrad更新网络的可学习参数dlnet使用RMSProp算法。在训练循环中使用此语法迭代地更新定义为dlnetwork对象。

[PARAMSaverageSqGrad) = rmspropupdate (PARAMS研究生averageSqGrad中的可学习参数更新PARAMS使用RMSProp算法。在训练循环中使用此语法迭代地更新使用函数定义的网络的可学习参数。

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

例子

全部折叠

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

创建的参数和参数的梯度为数字阵列。

params =兰德(3、3、4);研究生= 1(3、3、4);

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

averageSqGrad = [];

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

learnRate = 0.05;sqGradDecay = 0.95;

更新使用可学习的参数rmspropupdate

[参数,可以averageSqGrad] = rmspropupdate(参数,可以为研究所,averageSqGrad,learnRate,sqGradDecay);

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

负荷训练数据

加载数字训练数据。

[XTrain,YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses = numel(类);

定义网络

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

[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”) fullyConnectedLayer (numClasses'名称'“俱乐部”)softmaxLayer('名称'“softmax”));lgraph = layerGraph(层);

创建一个dlnetwork对象从层图。

dlnet = dlnetwork(lgraph);

定义模型梯度函数

创建助手函数modelGradients,在示例的最后列出。函数接受dlnetwork目的dlnet和一小批输入数据DLX与相应的标签ÿ,返回损耗和损失相对于在梯度的可学习参数dlnet

指定培训选项

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

miniBatchSize = 128;numEpochs = 20;numObservations =元素个数(YTrain);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);

在GPU上进行训练,如果有的话。使用GPU需要Parallel Computing Toolbox™和支持CUDA®的NVIDIA®GPU,计算能力为3.0或更高。

执行环境=“汽车”;

在可视化情节的训练进度。

地块=“训练进步”;

列车网络

使用自定义训练循环训练模型。对于每个纪元,洗牌数据和循环数据的小批。属性更新网络参数rmspropupdate函数。在每个阶段结束时,显示训练进度。

初始化训练进度图。

如果情节= =“训练进步”图形lineLossTrain = animatedline(“颜色”,[0.85 0.325 0.098]);ylim([0 INF])xlabel(“迭代”) ylabel (“失利”网格)结束

初始化平方平均梯度。

averageSqGrad = [];

训练网络。

迭代= 0;开始=抽搐;对于时代= 1:numEpochs%洗牌数据。idx = randperm(元素个数(YTrain));XTrain = XTrain (:,:,:, idx);YTrain = YTrain (idx);对于i = 1:numIterationsPerEpoch iteration = iteration + 1;数据的读%小批量和转换标签哑%变量。IDX =(I-1)* miniBatchSize + 1:我* miniBatchSize;X = XTrain(:,:,:,IDX);Y =零(numClasses,miniBatchSize,“单一”);对于C = 1:numClasses Y(C,YTrain(IDX)==类(C))= 1;结束%转换小批量数据到dlarray的。DLX = dlarray(单(X),“SSCB”);%如果在GPU上训练,然后数据转换为gpuArray。如果(executionEnvironment = =“汽车”&& canUseGPU)||执行环境==“图形”dlX = gpuArray (dlX);结束%使用dlfeval和the评估模型梯度和损失%modelGradients助手功能。(渐变,亏损)= dlfeval (@modelGradients, dlnet dlX Y);%使用RMSProp优化器更新网络参数。[dlnet, averageSqGrad] = rmspropupdate (dlnet、渐变averageSqGrad);%显示训练进度。如果情节= =“训练进步”D =持续时间(0,0,toc(开始),“格式”“hh: mm: ss”);addpoints (lineLossTrain、迭代、双(收集(extractdata(损失))))标题(”时代:“+划时代+“消逝”+ drawnow字符串(D))结束结束结束

测试网络

通过比较测试集上的预测值和真实标签来测试模型的分类精度。

[XTest, YTest] = digitTest4DArrayData;

将数据转换为dlarray与尺寸格式“SSCB”。对于GPU的预测,也将数据转换为gpuArray

dlXTest = dlarray(XTEST,“SSCB”);如果(executionEnvironment = =“汽车”&& canUseGPU)||执行环境==“图形”dlXTest = gpuArray (dlXTest);结束

使用a对图像进行分类dlnetwork对象,使用预测函数并找到得分最高的类。

dlYPred =预测(dlnet,dlXTest);[〜,IDX] = MAX(ExtractData由(dlYPred),[],1);YPred =类(IDX);

评估分类精度。

精度=平均值(YPred == YTest)
精度= 0.9860

模型梯度函数

辅助函数modelGradients需要一个dlnetwork目的dlnet和一小批输入数据DLX与相应的标签Y,并返回损耗和损失相对于在梯度的可学习参数dlnet。自动计算梯度,使用dlgradient函数。

函数[gradient,loss] = modelGradients(dlnet,dlX,Y);损失= crossentropy (dlYPred Y);梯度= dlgradient(损失、dlnet.Learnables);结束

输入参数

全部折叠

网络,指定为adlnetwork对象。

该函数更新dlnet.Learnables财产的dlnetwork对象。dlnet.Learnables是三个变量的表:

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

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

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

输入参数研究生必须是与?相同的表格dlnet.Learnables

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

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

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

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

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

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

输入参数研究生必须提供完全相同的数据类型,排序和字段(结构)或变量(表)作为PARAMS

数据类型:||结构|表格|细胞

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

的具体形式研究生取决于输入网络或可学习参数。下表显示所需的格式研究生可能的输入rmspropupdate

输入 可学的参数 梯度
dlnet 表格dlnet.Learnables包含参数,价值变量。的价值变量由单元格数组组成,单元格数组包含每个可学习参数dlarray 表使用相同的数据类型,变量和排序为dlnet.Learnables研究生必须有一个价值变量由包含每个可学习参数的梯度单元阵列。
PARAMS dlarray dlarray具有相同的数据类型和排序为PARAMS
数字数组 数值数组相同的数据类型和排序为PARAMS
单元阵列 具有相同数据类型、结构和排序的单元格数组PARAMS
结构 具有相同数据类型、字段和排序的结构PARAMS
参数,价值变量。的价值变量必须由单元格数组组成,单元格数组中包含每个可学习参数dlarray 具有相同数据类型、变量和排序的表PARAMS研究生必须有一个价值变量由包含每个可学习参数的梯度单元阵列。

你可以获得研究生从一个电话到dlfeval对包含调用的函数求值dlgradient。有关更多信息,请参见使用自动分化深度学习工具箱

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

的具体形式averageSqGrad取决于输入网络或可学习参数。下表显示所需的格式averageSqGrad可能的输入rmspropupdate

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

如果您指定averageSqGrad作为一个空数组,该函数假定以相同的方式作为用于在一系列的迭代的第一更新没有先前的梯度和运行。为了迭代更新可以学习的参数,使用averageSqGrad以前调用的输出rmspropupdate作为averageSqGrad输入。

全局学习率,指定为正标量。默认值learnRate0.001

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

平方梯度衰减因子,指定为之间的一个正标量01。默认值sqGradDecay0.9

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

输出参数

全部折叠

网络,返回为dlnetwork对象。

该函数更新dlnet.Learnables财产的dlnetwork对象。

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

方参数梯度更新均线,返回为dlarray、数字数组、单元数组、结构或表。

更多关于

全部折叠

RMSProp

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

兼容性的考虑

全部展开

R2020a改变了行为

扩展功能

介绍了在R2019b