主要内容

adamupdate

使用自适应更新参数矩估计(亚当)

描述

更新网络可学的参数在一个定制的培训循环使用自适应估计时刻(亚当)算法。

请注意

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

例子

(netUpdated,averageGrad,averageSqGrad)= adamupdate (,研究生,averageGrad,averageSqGrad,迭代)更新网络的可学的参数用亚当的算法。使用这种语法训练循环迭代更新网络定义为一个dlnetwork对象。

例子

(参数个数,averageGrad,averageSqGrad)= adamupdate (参数个数,研究生,averageGrad,averageSqGrad,迭代)更新可学的参数参数个数用亚当的算法。使用这种语法训练循环迭代更新可学的网络使用函数定义的参数。

例子

(___)= adamupdate (___learnRate,gradDecay,sqGradDecay,ε)还指定了值用于全球学习速率梯度衰变,平方梯度衰变,和小常数ε,除了输入参数在以前的语法。

例子

全部折叠

执行一个自适应估计时刻更新步骤全球学习的速度0.05梯度的衰减系数0.75,平方梯度的衰减系数0.95

创建参数和参数渐变为数值型数组。

params =兰德(3、3、4);研究生= 1 (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使用亚当算法来训练网络。

负荷训练数据

加载数字训练数据。

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

定义网络

定义网络和使用指定图像的平均价值的意思是选择在图像输入层。

层= [imageInputLayer ([28 28 1],“的意思是”,意味着(XTrain 4) convolution2dLayer (5、20) reluLayer convolution2dLayer (3 20“填充”20岁的,1)reluLayer convolution2dLayer (3“填充”1)reluLayer fullyConnectedLayer (numClasses) softmaxLayer];

创建一个dlnetwork数组对象的层。

网= dlnetwork(层);

定义模型损失函数

创建一个helper函数modelLoss最后,列出的例子。函数接受一个dlnetwork对象和一个mini-batch输入数据与相应的标签,并返回损失和损失的梯度对可学的参数。

指定培训选项

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

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

列车网络的

初始化培训进展阴谋。

图C = colororder;lineLossTrain = animatedline (“颜色”C (:));ylim([0正])包含(“迭代”)ylabel (“损失”网格)

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

averageGrad = [];averageSqGrad = [];

火车模型使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。更新网络参数使用adamupdate函数。在每个时代,显示培训进展。

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

迭代= 0;开始=抽搐;时代= 1:numEpochs%洗牌数据。idx = randperm(元素个数(TTrain));XTrain = XTrain (:,:,:, idx);TTrain = TTrain (idx);i = 1: numIterationsPerEpoch迭代=迭代+ 1;%读mini-batch数据和标签转换为假%变量。idx =(张)* miniBatchSize + 1:我* miniBatchSize;X = XTrain (:,:,:, idx);T = 0 (numClasses miniBatchSize,“单身”);T (c, c = 1: numClasses TTrain (idx) = =类(c)) = 1;结束% dlarray mini-batch的数据转换。X = dlarray(单(X)“SSCB”);%如果训练在GPU,然后将数据转换成一个gpuArray。如果canUseGPU X = gpuArray (X);结束%计算模型和梯度使用dlfeval损失% modelLoss函数。(损失,梯度)= dlfeval (@modelLoss,净,X, T);%更新使用亚当优化网络参数。[净,averageGrad averageSqGrad] = adamupdate(净、渐变averageGrad averageSqGrad,迭代);%显示培训进展。D =持续时间(0,0,toc(开始),“格式”,“hh: mm: ss”);=双重损失(损失);addpoints (lineLossTrain、迭代、失去)标题(”时代:“+时代+”,过去:“+ drawnow字符串(D))结束结束

测试网络

测试模型的分类精度通过比较测试集上的预测与真正的标签。

(XTest, tt) = digitTest4DArrayData;

将数据转换成dlarray维度的格式“SSCB”(空间、空间、通道、批)。GPU预测,也将数据转换成gpuArray

XTest = dlarray (XTest,“SSCB”);如果canUseGPU XTest = gpuArray (XTest);结束

使用分类图像dlnetwork对象,使用预测函数和找到类最高的分数。

欧美=预测(净,XTest);[~,idx] = max (extractdata(欧美),[],1);欧美=类(idx);

评估分类精度。

精度=意味着(欧美= = tt)
精度= 0.9900

损失函数模型

modelLosshelper函数接受一个dlnetwork对象和mini-batch输入数据X与相应的标签T,并返回损失和损失的梯度对可学的参数。自动计算梯度,使用dlgradient函数。

函数(损失,梯度)= modelLoss(净,X, T) Y =前进(净,X);损失= crossentropy (Y, T);梯度= dlgradient(损失、net.Learnables);结束

输入参数

全部折叠

网络,作为一个指定dlnetwork对象。

功能更新可学的财产的dlnetwork对象。net.Learnables是一个表有三个变量:

  • ——层名称指定为一个字符串标量。

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

  • 价值值的参数,指定为一个细胞包含一个数组dlarray

输入参数研究生必须是一个表的形式一样吗net.Learnables

网络可学的参数,指定为一个dlarray细胞,一个数值数组,数组,一个结构或一个表。

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

  • ——层名称指定为一个字符串标量。

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

  • 价值值的参数,指定为一个细胞包含一个数组dlarray

您可以指定参数个数作为一个容器的使用单元阵列可学的你的网络参数,结构,或表,或嵌套细胞数组或结构。细胞内的可学的参数数组,结构,或表必须dlarray或数值数据类型

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

数据类型:||结构体||细胞

渐变的损失,作为一个指定dlarray细胞,一个数值数组,数组,一个结构或一个表。

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

输入 可学的参数 梯度
net.Learnables包含,参数,价值变量。的价值变量由细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和订购net.Learnables研究生必须有一个价值变量组成的细胞阵列包含每个可学的参数的梯度。
参数个数 dlarray dlarray相同的数据类型和顺序参数个数
数字数组 数字数组具有相同数据类型和顺序参数个数
单元阵列 单元阵列具有相同的数据类型,结构,和订购参数个数
结构 结构相同的数据类型、字段和订购参数个数
,参数,价值变量。的价值变量必须包含细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和订购参数个数研究生必须有一个价值变量组成的细胞阵列包含每个可学的参数的梯度。

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

移动平均线参数的梯度,指定为一个空数组,adlarray细胞,一个数值数组,数组,一个结构或一个表。

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

输入 可学的参数 平均梯度
net.Learnables包含,参数,价值变量。的价值变量由细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和订购net.LearnablesaverageGrad必须有一个价值变量组成的细胞阵列包含每个可学的参数的平均梯度。
参数个数 dlarray dlarray相同的数据类型和顺序参数个数
数字数组 数字数组具有相同数据类型和顺序参数个数
单元阵列 单元阵列具有相同的数据类型,结构,和订购参数个数
结构 结构相同的数据类型、字段和订购参数个数
,参数,价值变量。的价值变量必须包含细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和订购参数个数averageGrad必须有一个价值变量组成的细胞阵列包含每个可学的参数的平均梯度。

如果您指定averageGradaverageSqGrad空数组,函数不承担任何先前的梯度和第一更新运行相同的方式在一系列的迭代。更新可学的迭代参数,使用averageGrad前一个调用的输出adamupdate随着averageGrad输入。

移动平均线的平方参数梯度,指定为一个空数组,一个dlarray细胞,一个数值数组,数组,一个结构或一个表。

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

输入 可学的参数 平均平方梯度
net.Learnables包含,参数,价值变量。的价值变量由细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和订购net.LearnablesaverageSqGrad必须有一个价值变量组成的细胞阵列包含每个可学的参数的平均平方梯度。
参数个数 dlarray dlarray相同的数据类型和顺序参数个数
数字数组 数字数组具有相同数据类型和顺序参数个数
单元阵列 单元阵列具有相同的数据类型,结构,和订购参数个数
结构 结构相同的数据类型、字段和订购参数个数
,参数,价值变量。的价值变量必须包含细胞包含每个可学的参数作为数组dlarray 表具有相同数据类型、变量和排序参数个数averageSqGrad必须有一个价值变量组成的细胞阵列包含每个可学的参数的平均平方梯度。

如果您指定averageGradaverageSqGrad空数组,函数不承担任何先前的梯度和第一更新运行相同的方式在一系列的迭代。更新可学的迭代参数,使用averageSqGrad前一个调用的输出adamupdate随着averageSqGrad输入。

迭代数量,指定为一个正整数。第一次调用adamupdate,使用的值1。你必须增加迭代通过1对于每一个在一系列的后续调用,调用adamupdate。亚当算法使用这个值来修正偏差在移动平均线一组迭代的开始。

全球学习速率,指定为一个积极的标量。的默认值learnRate0.001

如果你指定的网络参数dlnetwork每个参数的学习速率是全球学习速率乘以相应的学习速率因子属性中定义的网络层。

梯度衰减系数,指定为一个积极的标量之间01。的默认值gradDecay0.9

平方梯度衰减系数,指定为一个积极的标量之间01。的默认值sqGradDecay0.999

小恒防止被零除错误,指定为一个积极的标量。的默认值ε1 e-8

输出参数

全部折叠

更新网络,作为一个返回dlnetwork对象。

功能更新可学的财产的dlnetwork对象。

网络可学的参数更新,作为一个返回dlarray细胞,一个数值数组,数组,结构,或一个表价值包含网络的更新可学的参数变量。

更新移动平均参数的梯度,作为一个返回dlarray细胞,一个数值数组,数组,一个结构或一个表。

更新的移动平均平方参数梯度,作为一个返回dlarray细胞,一个数值数组,数组,一个结构或一个表。

更多关于

全部折叠

亚当

函数使用自适应的时刻估计(亚当)算法来更新可学的参数。有关更多信息,请参见亚当算法下的定义随机梯度下降法trainingOptions参考页面。

扩展功能

版本历史

介绍了R2019b