主要内容

sgdmupdate

更新参数使用随机梯度下降法和动力(个)

描述

更新网络可学的参数在一个定制的培训循环使用随机梯度下降法和动量(个)算法。

请注意

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

例子

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

例子

(参数个数,韦尔)= sgdmupdate (参数个数,研究生,韦尔)更新可学的参数参数个数使用一个算法。使用这种语法训练循环迭代更新可学的网络使用函数定义的参数。

例子

(___)= sgdmupdate (___learnRate,动力)还指定了值用于全球学习速率和动量,除了输入参数在以前的语法。

例子

全部折叠

执行一个更新的全球学习速率0.05和动量的0.95

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

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

初始化参数为第一个迭代速度。

韦尔= [];

指定自定义全球学习速率和动量的值。

learnRate = 0.05;动量= 0.95;

更新可学的参数使用sgdmupdate

(params,韦尔)= sgdmupdate (params,研究生,或者,learnRate,动量);

使用sgdmupdate使用个算法来训练网络。

负荷训练数据

加载数字训练数据。

[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);

列车网络的

初始化速度参数。

韦尔= [];

计算迭代的总数的培训进度监控。

numIterations = numEpochs * numIterationsPerEpoch;

初始化TrainingProgressMonitor对象。因为计时器开始创建监视器对象时,确保你创建对象接近的训练循环。

监控= = trainingProgressMonitor(指标“损失”信息=“时代”包含=“迭代”);

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

火车在GPU上,如果一个是可用的。使用GPU需要并行计算工具箱™和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)

迭代= 0;时代= 0;时代< numEpochs & & ~班长。停止时代=时代+ 1;%洗牌数据。idx = randperm(元素个数(TTrain));XTrain = XTrain (:,:,:, idx);TTrain = TTrain (idx);我= 0;我< numIterationsPerEpoch & & ~班长。停止我= + 1;迭代=迭代+ 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);%更新使用个优化网络参数。(净,韦尔)= sgdmupdate(净、渐变韦尔);%更新培训进度监控。recordMetrics(监控、迭代损失=损失);updateInfo(监视、时代=时代+“的”+ numEpochs);班长。进步= 100 *迭代/ numIterations;结束结束

测试网络

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

(XTest, tt) = digitTest4DArrayData;

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

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

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

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

评估分类精度。

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

损失函数模型

modelLoss函数接受一个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细胞,一个数值数组,数组,一个结构或一个表。

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

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

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

速度参数,指定为一个空数组dlarray细胞,一个数值数组,数组,一个结构或一个表。

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

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

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

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

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

动力,指定为一个积极的标量之间01。的默认值动力0.9

输出参数

全部折叠

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

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

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

参数更新速度,作为一个返回dlarray细胞,一个数值数组,数组,一个结构或一个表。

更多关于

全部折叠

随机梯度下降法与动力

函数使用随机梯度下降法与动量算法更新可学的参数。有关更多信息,请参见随机梯度下降法的定义与动量算法随机梯度下降法trainingOptions参考页面。

扩展功能

版本历史

介绍了R2019b