主要内容

adamupdate.

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

描述

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

笔记

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

例子

[DLNET.平均普利德AveragesQgrad.] = adamupdate(DLNET.毕业平均普利德AveragesQgrad.迭代更新网络的可知参数DLNET.使用ADAM算法。在训练循环中使用此语法来迭代地更新定义为a的网络dlnetwork.目的。

例子

[参数平均普利德AveragesQgrad.] = adamupdate(参数毕业平均普利德AveragesQgrad.迭代更新可知参数参数使用ADAM算法。在训练循环中使用此语法来迭代地更新使用函数定义的网络的学习参数。

例子

[___] = adamupdate(___学习GraddecaySqgraddecay埃斯利昂除了先前语法中的输入参数之外,还指定用于全局学习速率,渐变衰减,方梯度衰减和小常量ePsilon的值。

例子

全部收缩

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

创建参数和参数渐变作为数字阵列。

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

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

迭代= 1;平均= [];averagesqgrad = [];

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

学习= 0.05;Graddecay = 0.75;Sqgraddecay = 0.95;

使用可读参数使用adamupdate.

[params,sparedgrad,averagesqgrad] = adamupdate(params,grad,sharmergrad,averagesqgrad,reateration,shearchrate,graddecay,sqgraddecay);

更新迭代计数器。

迭代=迭代+ 1;

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

负载培训数据

加载数字训练数据。

[xtrain,ytrain] = Digittrain4darraydata;Classes =类别(YTrain);numclasses = numel(类);

定义网络

定义网络并使用该网络指定平均图像值'意思'选项在图像输入层中。

图层= [imageInputLayer([28 28 1],'名称''输入''意思',平均值(xtrain,4))卷积2dlayer(5,20,'名称''conv1')剥离('名称''relu1')卷积2dlayer(3,20,'填充',1,'名称''conv2')剥离('名称''relu2')卷积2dlayer(3,20,'填充',1,'名称''conv3')剥离('名称''relu3')全连接列(numcrasses,'名称''fc')softmaxlayer('名称''softmax')];Lgraph = LayerGraph(层);

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

dlnet = dlnetwork(3);

定义模型渐变功能

创建辅助功能MapicalGRADENTERS.,列在示例的末尾。该功能需要一个dlnetwork.目的DLNET.和迷你批次输入数据DLX.具有相应的标签y,并返回丢失和丢失的损失和学习参数的损失DLNET.

指定培训选项

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

minibatchsize = 128;numepochs = 20;numobservations = numel(ytrain);numiterationsperepoch = bloor(numobservation./minibatchsize);

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

executionenvironment =“汽车”;

可视化情节中的培训进度。

plots =.“培训 - 进展”;

火车网络

使用自定义训练循环训练模型。对于每个epoch,将数据和循环扫描迷你批次数据。使用使用的网络参数更新网络参数adamupdate.功能。在每个时代结束时,显示培训进度。

初始化培训进度情节。

如果plots ==“培训 - 进展”图lineloSstrain =动画线('颜色',[0.85 0.325 0.098]);ylim([0 inf])xlabel(“迭代”)ylabel(“损失”) 网格结尾

初始化平均渐变和平均梯度。

平均= [];averagesqgrad = [];

训练网络。

迭代= 0;start = tic;为了epoch = 1:numepochs%Shuffle数据。IDX = RANDPERM(NUMER(YTrain));XTrain = XTrain(:,:,idx);YTrain = Ytrain(IDX);为了i = 1:numiterationsPerepoch迭代=迭代+ 1;%读取迷你批次数据并将标签转换为虚拟%变量。IDX =(I-1)*小匹匹配+ 1:i *小匹匹配;x = XTrain(::::,IDX);y =零(numcrasses,minibatchsize,'单身的');为了c = 1:numclasses y(c,ytrain(idx)==类(c))= 1;结尾%将mini批次数据转换为dlarray。dlx = dlarray(单(x),'SSCB');%如果在GPU上培训,则将数据转换为GPUArray。如果(execultenvironment ==.“汽车”&& canusegpu)||executionenvironment ==.“GPU”DLX = GPUARRAY(DLX);结尾%使用dlfeval和dlfeval评估模型渐变和损失%MASEMGRADENTERS帮助函数。[毕业,损失] = dlfeval(@ maposgradients,dlnet,dlx,y);%使用ADAM Optimizer更新网络参数。[dlnet,sultergrad,averagesqgrad] = adamupdate(dlnet,毕业,普利特普拉德,平均qgrad,迭代);%显示培训进度。如果plots ==“培训 - 进展”d =持续时间(0,0,toc(start),'格式''hh:mm:ss');Addpoints(LineLoStrain,迭代,Double(收集(提取数据(丢失))))标题(“时代:”+ epoch +“,经过:”+字符串(d))绘制结尾结尾结尾

测试网络

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

[xtest,ytest] = digittest4darraydata;

将数据转换为adlarray.具有维度格式'SSCB'。对于GPU预测,还将数据转换为aGPUArray.

dlxtest = dlarray(xtest,'SSCB');如果(execultenvironment ==.“汽车”&& canusegpu)||executionenvironment ==.“GPU”dlxtest = gpuarray(dlxtest);结尾

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

dlypred =预测(Dlnet,dlxtest);[〜,idx] = max(提取数据(dlypred),[],1);Ypred =类(IDX);

评估分类准确性。

精度=均值(Ypred == ytest)
精度= 0.9896.

模型梯度函数

MapicalGRADENTERS.帮助函数需要一个dlnetwork.目的DLNET.和迷你批次输入数据DLX.具有相应的标签y,并返回关于可学习参数的丢失和损失的渐变DLNET.。要自动计算渐变,请使用Dlgradient.功能。

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

输入参数

全部收缩

网络,指定为adlnetwork.目的。

函数更新dlnet.learnables.财产的财产dlnetwork.目的。dlnet.learnables.是一个带有三个变量的表:

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

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

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

输入论点毕业必须是与之相同的表格dlnet.learnables.

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

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

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

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

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

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

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

数据类型:单身的|双倍的|塑造|桌子|细胞

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

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

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

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

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

确切的形式平均普利德取决于输入网络或学习参数。下表显示了所需格式平均普利德对于可能的输入adamupdate.

输入 学习参数 平均梯度
DLNET. 桌子dlnet.learnables.包含范围, 和价值变量。这价值变量由包含每个被学习参数的单元阵列组成dlarray. 表与相同的数据类型,变量和订购为dlnet.learnables.平均普利德必须有一个价值可变由包含每个学习参数的平均梯度的单元阵列组成。
参数 dlarray. dlarray.具有相同的数据类型和订购参数
数字数组 数字数组与相同的数据类型和订购为参数
细胞阵列 单元阵列具有相同的数据类型,结构和订购参数
结构 结构具有相同的数据类型,字段和订购参数
范围, 和价值变量。这价值变量必须由包含每个被学习参数的单元阵列组成dlarray. 表中具有相同数据类型,变量和订购的表参数平均普利德必须有一个价值可变由包含每个学习参数的平均梯度的单元阵列组成。

如果您指定平均普利德AveragesQgrad.作为空阵列,该函数不假设先前的渐变并以与一系列迭代中的第一个更新相同的方式运行。要迭代更新可学习的参数,请使用平均普利德以前的呼叫输出adamupdate.作为平均普利德输入。

平均平均参数梯度,指定为空数组,adlarray.,数字阵列,小区阵列,结构或表。

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

输入 学习参数 平均平均梯度
DLNET. 桌子dlnet.learnables.包含范围, 和价值变量。这价值变量由包含每个被学习参数的单元阵列组成dlarray. 表与相同的数据类型,变量和订购为dlnet.learnables.AveragesQgrad.必须有一个价值可变由包含每个学习参数的平均平均梯度的单元阵列组成。
参数 dlarray. dlarray.具有相同的数据类型和订购参数
数字数组 数字数组与相同的数据类型和订购为参数
细胞阵列 单元阵列具有相同的数据类型,结构和订购参数
结构 结构具有相同的数据类型,字段和订购参数
范围, 和价值变量。这价值变量必须由包含每个被学习参数的单元阵列组成dlarray. 表与相同的数据类型,变量和订购为参数AveragesQgrad.必须有一个价值可变由包含每个学习参数的平均平均梯度的单元阵列组成。

如果您指定平均普利德AveragesQgrad.作为空阵列,该函数不假设先前的渐变并以与一系列迭代中的第一个更新相同的方式运行。要迭代更新可学习的参数,请使用AveragesQgrad.以前的呼叫输出adamupdate.作为AveragesQgrad.输入。

迭代号,指定为正整数。第一次打电话adamupdate.,使用价值1。你必须增加迭代经过1对于每次调用的每个后续呼叫adamupdate.。adam算法使用此值来校正一组迭代开始时移动平均值的偏差。

全球学习率,指定为正标量。默认值学习0.001

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

梯度衰减因子,指定为正标量0.1。默认值Graddecay0.9

平方梯度衰减因子,指定为正标量0.1。默认值Sqgraddecay0.999.

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

输出参数

全部收缩

网络,作为一个返回dlnetwork.目的。

函数更新dlnet.learnables.财产的财产dlnetwork.目的。

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

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

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

更多关于

全部收缩

亚当

该函数使用自适应时刻估计(ADAM)算法来更新可读参数。有关更多信息,请参阅亚当算法下的定义随机梯度下降在这一点培训选项参考页面。

扩展能力

在R2019B中介绍