adamupdate
使用自适应更新参数矩估计(亚当)
语法
描述
更新网络可学的参数在一个定制的培训循环使用自适应估计时刻(亚当)算法。
请注意
这个函数应用亚当优化算法来更新网络参数定义为自定义训练循环使用网络dlnetwork
对象或函数模型。如果你想训练一个网络定义为一个层
数组或作为一个LayerGraph
,使用以下功能:
创建一个
TrainingOptionsADAM
对象使用trainingOptions
函数。使用
TrainingOptionsADAM
对象的trainNetwork
函数。
(
更新网络的可学的参数netUpdated
,averageGrad
,averageSqGrad
)= adamupdate (净
,研究生
,averageGrad
,averageSqGrad
,迭代
)净
用亚当的算法。使用这种语法训练循环迭代更新网络定义为一个dlnetwork
对象。
(
更新可学的参数参数个数
,averageGrad
,averageSqGrad
)= adamupdate (参数个数
,研究生
,averageGrad
,averageSqGrad
,迭代
)参数个数
用亚当的算法。使用这种语法训练循环迭代更新可学的网络使用函数定义的参数。
(___)= adamupdate (___
还指定了值用于全球学习速率梯度衰变,平方梯度衰变,和小常数ε,除了输入参数在以前的语法。learnRate
,gradDecay
,sqGradDecay
,ε
)
例子
更新可学的参数使用adamupdate
执行一个自适应估计时刻更新步骤全球学习的速度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
使用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
损失函数模型
的modelLoss
helper函数接受一个dlnetwork
对象净
和mini-batch输入数据X
与相应的标签T
,并返回损失和损失的梯度对可学的参数净
。自动计算梯度,使用dlgradient
函数。
函数(损失,梯度)= modelLoss(净,X, T) Y =前进(净,X);损失= crossentropy (Y, T);梯度= dlgradient(损失、net.Learnables);结束
输入参数
净
- - - - - -网络
dlnetwork
对象
网络,作为一个指定dlnetwork
对象。
功能更新可学的
财产的dlnetwork
对象。net.Learnables
是一个表有三个变量:
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
输入参数研究生
必须是一个表的形式一样吗net.Learnables
。
参数个数
- - - - - -网络可学的参数
dlarray
|数字数组|单元阵列|结构|表
网络可学的参数,指定为一个dlarray
细胞,一个数值数组,数组,一个结构或一个表。
如果您指定参数个数
作为一个表,它必须包含以下三个变量:
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
您可以指定参数个数
作为一个容器的使用单元阵列可学的你的网络参数,结构,或表,或嵌套细胞数组或结构。细胞内的可学的参数数组,结构,或表必须dlarray
或数值数据类型双
或单
。
输入参数研究生
必须提供相同的数据类型,排序,和字段(结构)或变量(表)参数个数
。
数据类型:单
|双
|结构体
|表
|细胞
研究生
- - - - - -渐变的损失
dlarray
|数字数组|单元阵列|结构|表
渐变的损失,作为一个指定dlarray
细胞,一个数值数组,数组,一个结构或一个表。
的具体形式研究生
取决于输入网络或可学的参数。下面的表显示了所需的格式研究生
可能的输入adamupdate
。
输入 | 可学的参数 | 梯度 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。研究生 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的梯度。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购参数个数 。研究生 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的梯度。 |
你可以获得研究生
从一个调用dlfeval
评估包含调用一个函数dlgradient
。有关更多信息,请参见在深度学习工具箱使用自动分化。
averageGrad
- - - - - -移动平均线参数的梯度
[]
|dlarray
|数字数组|单元阵列|结构|表
移动平均线参数的梯度,指定为一个空数组,adlarray
细胞,一个数值数组,数组,一个结构或一个表。
的具体形式averageGrad
取决于输入网络或可学的参数。下面的表显示了所需的格式averageGrad
可能的输入adamupdate
。
输入 | 可学的参数 | 平均梯度 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。averageGrad 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的平均梯度。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购参数个数 。averageGrad 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的平均梯度。 |
如果您指定averageGrad
和averageSqGrad
空数组,函数不承担任何先前的梯度和第一更新运行相同的方式在一系列的迭代。更新可学的迭代参数,使用averageGrad
前一个调用的输出adamupdate
随着averageGrad
输入。
averageSqGrad
- - - - - -移动平均线的平方参数梯度
[]
|dlarray
|数字数组|单元阵列|结构|表
移动平均线的平方参数梯度,指定为一个空数组,一个dlarray
细胞,一个数值数组,数组,一个结构或一个表。
的具体形式averageSqGrad
取决于输入网络或可学的参数。下面的表显示了所需的格式averageSqGrad
可能的输入adamupdate
。
输入 | 可学的参数 | 平均平方梯度 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。averageSqGrad 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的平均平方梯度。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和排序参数个数 。averageSqGrad 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的平均平方梯度。 |
如果您指定averageGrad
和averageSqGrad
空数组,函数不承担任何先前的梯度和第一更新运行相同的方式在一系列的迭代。更新可学的迭代参数,使用averageSqGrad
前一个调用的输出adamupdate
随着averageSqGrad
输入。
迭代
- - - - - -迭代数
正整数
迭代数量,指定为一个正整数。第一次调用adamupdate
,使用的值1
。你必须增加迭代
通过1
对于每一个在一系列的后续调用,调用adamupdate
。亚当算法使用这个值来修正偏差在移动平均线一组迭代的开始。
learnRate
- - - - - -全球学习速率
0.001
(默认)|积极的标量
全球学习速率,指定为一个积极的标量。的默认值learnRate
是0.001
。
如果你指定的网络参数dlnetwork
每个参数的学习速率是全球学习速率乘以相应的学习速率因子属性中定义的网络层。
gradDecay
- - - - - -渐变衰减系数
0.9
(默认)|积极的标量之间0
和1
梯度衰减系数,指定为一个积极的标量之间0
和1
。的默认值gradDecay
是0.9
。
sqGradDecay
- - - - - -平方梯度衰减系数
0.999
(默认)|积极的标量之间0
和1
平方梯度衰减系数,指定为一个积极的标量之间0
和1
。的默认值sqGradDecay
是0.999
。
ε
- - - - - -小的常数
1 e-8
(默认)|积极的标量
小恒防止被零除错误,指定为一个积极的标量。的默认值ε
是1 e-8
。
输出参数
netUpdated
——更新网络
dlnetwork
对象
更新网络,作为一个返回dlnetwork
对象。
功能更新可学的
财产的dlnetwork
对象。
参数个数
——更新网络可学的参数
dlarray
| |数字数组单元阵列| |表结构
网络可学的参数更新,作为一个返回dlarray
细胞,一个数值数组,数组,结构,或一个表价值
包含网络的更新可学的参数变量。
averageGrad
更新移动均线参数的梯度
dlarray
| |数字数组单元阵列| |表结构
更新移动平均参数的梯度,作为一个返回dlarray
细胞,一个数值数组,数组,一个结构或一个表。
averageSqGrad
——更新移动平均平方参数梯度
dlarray
| |数字数组单元阵列| |表结构
更新的移动平均平方参数梯度,作为一个返回dlarray
细胞,一个数值数组,数组,一个结构或一个表。
更多关于
亚当
函数使用自适应的时刻估计(亚当)算法来更新可学的参数。有关更多信息,请参见亚当算法下的定义随机梯度下降法在trainingOptions
参考页面。
扩展功能
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
使用笔记和限制:
当下列至少一个输入参数
gpuArray
或者一个dlarray
基础数据的类型gpuArray
,这个函数在GPU上运行。研究生
averageGrad
averageSqGrad
参数个数
有关更多信息,请参见运行在GPU MATLAB函数(并行计算工具箱)。
版本历史
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。