主要内容

adamupdate

使用Adaptive Sonment估算更新参数(亚当)

描述

使用自适应矩估计(Adam)算法在自定义训练循环中更新网络可学习参数。

请注意

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

例子

(dlnetaverageGradaverageSqGrad) = adamupdate (dlnet毕业averageGradaverageSqGrad迭代更新网络的可学习参数dlnet用亚当算法。在训练循环中使用此语法迭代地更新定义为dlnetwork.对象。

例子

(参数个数averageGradaverageSqGrad) = adamupdate (参数个数毕业averageGradaverageSqGrad迭代更新可知参数参数个数用亚当算法。在训练循环中使用此语法,迭代地更新使用函数定义的网络的可学习参数。

例子

(___) = adamupdate (___learnRategradDecaysqgraddecay.埃斯利昂除了前面语法中的输入参数外,还指定了用于全局学习率、梯度衰减、平方梯度衰减和小常数的值。

例子

全部折叠

执行具有全局学习率的单个Adaptive Mony估算更新步骤0.05,梯度衰减因子0.75,梯度衰减因子的平方0.95

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

Params = Rand(3,3,4);毕业=那些(3,3,4);

初始化第一次迭代的迭代计数器、平均梯度和平均平方梯度。

迭代= 1;averageGrad = [];averageSqGrad = [];

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

learnRate = 0.05;gradDecay = 0.75;sqGradDecay = 0.95;

使用adamupdate

[params, averageGrad averageSqGrad] = adamupdate (params,研究生,averageGrad, averageSqGrad,迭代,learnRate, gradDecay, sqGradDecay);

更新迭代计数器。

迭代=迭代+ 1;

使用adamupdate使用ADAM算法训练网络。

负荷训练数据

加载数字训练数据。

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

定义网络

属性定义网络并指定平均图像值'意思'选项在图像输入层。

[imageInputLayer([28 28 1],]),“名字”“输入”'意思',平均值(XTrain,4))卷积2dlayer(5,20,“名字”“conv1”) reluLayer (“名字”'relu1')卷积2dlayer(3,20,'填充',1,“名字”“conv2”) reluLayer (“名字”“relu2”)卷积2dlayer(3,20,'填充',1,“名字”“conv3”) reluLayer (“名字”“relu3”) fullyConnectedLayer (numClasses“名字”“俱乐部”) softmaxLayer (“名字”'softmax'));lgraph = layerGraph(层);

创建一个dlnetwork.来自图层图的对象。

dlnet = dlnetwork (lgraph);

定义模型渐变功能

创建辅助功能大型摩托地,列在示例的末尾。该功能需要一个dlnetwork.对象dlnet和迷你输​​入数据dlX有相应的标签y,并返回损失和损失相对于可学习参数的梯度dlnet

指定培训选项

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

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

在GPU上火车,如果有一个可用的话。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU通金宝app过发布支持(并行计算工具箱)

executionEnvironment =“汽车”

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

情节=“训练进步”

列车网络的

使用自定义训练循环训练模型。对于每个epoch,洗牌数据并在小批数据上循环。使用adamupdate函数。在每个时代结束时,显示培训进度。

初始化培训进度图。

如果情节= =“训练进步”figure lineosstrain = animatedline('颜色'[0.85 0.325 0.098]);ylim([0正])包含(“迭代”) ylabel (“损失”) 网格结束

初始化平均梯度和平方平均梯度。

averageGrad = [];averageSqGrad = [];

培训网络。

迭代= 0;start = tic;时代= 1:numEpochs%洗牌数据。IDX = RANDPERM(NUMER(YTRAIN));XTrain = XTrain(:,:,:,IDX);YTrain = YTrain(IDX);i = 1:numIterationsPerEpoch iteration = iteration + 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。如果(execultenvironment ==.“汽车”&& canUseGPU) || executionEnvironment ==“图形”dlX = gpuArray (dlX);结束使用dlfeval和%模型梯度辅助功能。(研究生,亏损)= dlfeval (@modelGradients, dlnet dlX Y);%使用ADAM Optimizer更新网络参数。[dlnet,sharmergrad,averagesqgrad] = adamupdate(Dlnet,毕业,普利特格德,平均QGrad,迭代);%显示训练进度。如果情节= =“训练进步”D =持续时间(0,0,toc(开始),'格式''hh:mm:ss');Addpoints(LineLoStrain,迭代,Double(收集(提取数据(丢失)))标题(”时代:“+时代+”,过去:“+ drawnow字符串(D))结束结束结束

测试网络

通过比较真实标签的测试集的预测来测试模型的分类准确性。

[xtest,ytest] = digittest4darraydata;

将数据转换为dlarray使用维度格式'SSCB'。对于GPU预测,也将数据转换为GPUARRAY.

dlXTest = dlarray (XTest,'SSCB');如果(execultenvironment ==.“汽车”&& canUseGPU) || executionEnvironment ==“图形”dlXTest = gpuArray (dlXTest);结束

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

dlYPred =预测(dlnet dlXTest);[~, idx] = max (extractdata (dlYPred), [], 1);YPred =类(idx);

评估分类精度。

精度=意味着(YPred = =次)
精度= 0.9896

模型梯度函数

大型摩托地Helper函数接受dlnetwork.对象dlnet和迷你输​​入数据dlX有相应的标签Y,并返回损失和损失相对于中可学习参数的梯度dlnet。要自动计算梯度,请使用dlgradient函数。

函数[梯度,损失] = Maposgradients(DLNET,DLX,Y)Dlypry =前进(DLNET,DLX);损失=联语(Dlypred,Y);梯度= Dlgradient(损失,DLNET.LEALNABLE);结束

输入参数

全部折叠

网络,指定为adlnetwork.对象。

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

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

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

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

输入参数毕业必须是表格的表格dlnet。可学的

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

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

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

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

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

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

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

数据类型:|双倍的|结构体|表格|细胞

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

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

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

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

参数梯度的移动平均值,指定为空数组dlarray,数字阵列,小区阵列,结构或表。

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

输入 学习参数 平均梯度
dlnet 桌子dlnet。可学的包含参数,价值变量。的价值变量由包含每个可学习参数的单元格数组组成dlarray 具有相同数据类型、变量和顺序的表dlnet。可学的averageGrad必须有一个价值由包含每个可学习参数的平均梯度的单元阵列组成的变量。
参数个数 dlarray dlarray具有相同的数据类型和顺序参数个数
数字数组 具有相同数据类型和顺序的数字数组参数个数
单元阵列 具有相同数据类型,结构和订购的单元格数组参数个数
结构 结构,具有相同的数据类型、字段和顺序参数个数
参数,价值变量。的价值变量必须由包含每个被学习参数的单元阵列组成dlarray 表与相同的数据类型,变量和订购为参数个数averageGrad必须有一个价值由包含每个可学习参数的平均梯度的单元阵列组成的变量。

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

参数梯度的平方的移动平均值,指定为一个空数组dlarray,数字阵列,小区阵列,结构或表。

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

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

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

迭代号,指定为正整数。第一次打电话adamupdate,使用价值1。你必须增加迭代通过1每个后续呼叫一系列呼叫adamupdate。在一组迭代的开始,Adam算法使用这个值来修正移动平均中的偏差。

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

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

梯度衰减因子,指定为正标量01。的默认值gradDecay0.9

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

用于防止被零除错误的小常数,指定为正标量。的默认值埃斯利昂1E-8

输出参数

全部折叠

网络,返回为dlnetwork.对象。

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

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

更新了参数梯度的移动平均值,作为一个dlarray,数字阵列,小区阵列,结构或表。

更新的平方参数梯度的移动平均,返回为dlarray,数字阵列,小区阵列,结构或表。

更多关于

全部折叠

亚当

该函数使用自适应矩估计(Adam)算法来更新可学习参数。要了解更多信息,请参见下面的Adam算法的定义随机梯度下降trainingOptions参考页面。

扩展能力

介绍了R2019b