sgdmupdate

使用随机梯度下降动量更新参数(SGDM)

描述

更新定制训练循环使用动量(SGDM)算法随机梯度下降的网络可以学习的参数。

注意

此功能适用的SGDM优化算法来更新网络参数定制培训循环,即利用网络定义为dlnetwork对象或模型函数。如果你想训练定义为一个网络阵列或作为LayerGraph使用以下功能:

[dlnetVEL] = sgdmupdate(dlnet毕业VEL更新网络的可学习参数dlnet使用SGDM算法。在一次训练中循环使用此语法来迭代更新定义为一个网络dlnetwork目的。

[PARAMSVEL] = sgdmupdate(PARAMS毕业VEL更新了可以学习的参数PARAMS使用SGDM算法。在一次训练中循环使用此语法来迭代更新使用函数定义网络的可学习的参数。

[___] = sgdmupdate(___learnRate动量还规定值以用于全球学习率和势头,除了在以前的语法输入参数。

例子

全部收缩

执行与全球学习率单SGDM更新步骤0.05和动量0.95

创建的参数和参数的梯度为数字阵列。

PARAMS =兰特(3,3,4);毕业=酮(3,3,4);

初始化对于第一次迭代参数的速度。

VEL = [];

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

learnRate = 0.05;动量= 0.95;

更新使用可学习的参数sgdmupdate

[参数,可以VEL] = sgdmupdate(参数,可以为研究所,VEL,learnRate,动量);

sgdmupdate使用SGDM算法训练网络。

负荷训练数据

负荷训练数据的位数。

[XTrain,YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses = numel(类);

定义网络

定义网络架构,并使用指定的平均图像价值'意思'选项,在图像输入层。

层= [imageInputLayer([28 28 1],'名称'“输入”'意思',平均值(XTrain,4))convolution2dLayer(5,20,'名称''CONV1')reluLayer('名称''relu1')convolution2dLayer(3,20,'填充'1,'名称''CONV2')reluLayer('名称''relu2')convolution2dLayer(3,20,'填充'1,'名称''conv3')reluLayer('名称''relu3')fullyConnectedLayer(numClasses,'名称''FC')];lgraph = layerGraph(层);

创建一个dlnetwork从该层图形对象。

dlnet = dlnetwork(lgraph);

定义模式渐变功能

创建辅助功能modelGradients在该示例的末尾列出。该功能需要一个dlnetwork目的dlnet和小批量的输入数据的DLX与相应的标签ÿ,返回损耗和损失相对于在梯度的可学习参数dlnet

指定培训选项

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

miniBatchSize = 128;numEpochs = 20;numObservations = numel(YTrain);numIterationsPerEpoch =地板(numObservations./miniBatchSize);

在GPU上火车,如果可用。使用GPU需要并行计算工具箱™和启用CUDA®GPUNVIDIA®计算能力3.0或更高版本。

执行环境=“汽车”;

初始化速度参数。

VEL = [];

初始化训练进度情节。

地块=“训练进度”;如果地块==“训练进度”迭代= 1;图lineLossTrain = animatedline;xlabel(“总迭代”)ylabel(“失利”结束

列车网络

培养使用自定义的训练循环模型。对于每一个时代,洗牌对数据的小批量数据和循环。更新使用的网络参数sgdmupdate功能。在每个历元的端部,显示训练进度。

对于历元= 1:numEpochs%随机数据。IDX = randperm(numel(YTrain));XTrain = XTrain(:,:,:,IDX);YTrain = YTrain(IDX);对于I = 1:numIterationsPerEpoch数据的读%小批量和转换标签哑%变量。IDX =(I-1)* miniBatchSize + 1:我* miniBatchSize;X = XTrain(:,:,:,IDX);Y =零(numClasses,miniBatchSize,'单');对于C = 1:numClasses Y(C,YTrain(IDX)==类(C))= 1;结束%转换小批量数据到dlarray的。DLX = dlarray(单(X),'SSCB');%如果在GPU上训练,然后数据转换为gpuArray。如果(执行环境==“汽车”&& canUseGPU)||执行环境==“GPU”DLX = gpuArray(DLX);结束%评估模型梯度和损失使用dlfeval和%modelGradients助手功能。[毕业,损耗] = dlfeval(@ modelGradients,dlnet,DLX,Y);%更新使用SGDM优化网络参数。[dlnet,VEL] = sgdmupdate(dlnet,毕业,VEL);%显示训练进度。如果地块==“训练进度”addpoints(lineLossTrain,迭代,双(聚(ExtractData由(亏损))))标题(“损失训练期间:时代 - ”+划时代+“迭代 - ”+ I)的DrawNow迭代=迭代+ 1;结束结束结束

测试网络

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

[XTEST,YTest] = digitTest4DArrayData;

转换数据到dlarray与尺寸格式'SSCB'。对于GPU的预测,也将数据转换为gpuArray

dlXTest = dlarray(XTEST,'SSCB');如果(执行环境==“汽车”&& canUseGPU)||执行环境==“GPU”dlXTest = gpuArray(dlXTest);结束

要使用图像分类dlnetwork对象,请使用预测工作,并找到得分最高的类。

dlYPred =预测(dlnet,dlXTest);[〜,IDX] = MAX(ExtractData由(dlYPred),[],1);YPred =类(IDX);

评估分类精度。

精度=平均值(YPred == YTest)
精度= 0.9914

型号渐变功能

modelGradients辅助函数需要dlnetwork目的dlnet和小批量的输入数据的DLX与相应的标签ÿ,返回损耗和损失相对于在梯度的可学习参数dlnet。自动计算梯度,使用dlgradient功能。

功能[梯度,损耗] = modelGradients(dlnet,DLX,Y)= dlYPred向前(dlnet,DLX);dlYPred = SOFTMAX(dlYPred);损耗= crossentropy(dlYPred,Y);梯度= dlgradient(损失,dlnet.Learnables);结束

输入参数

全部收缩

网络,指定为dlnetwork目的。

功能更新dlnet.Learnables财产dlnetwork目的。dlnet.Learnables是三个变量的表:

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

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

  • - 参数的值,指定为包含单元阵列的dlarray

输入参数毕业必须是相同的形式的表dlnet.Learnables

网络可学习参数,指定为dlarray,数字阵列,单元阵列,结构,或一个表。

如果您指定PARAMS为表,它必须包含以下三个变量。

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

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

  • - 参数的值,指定为包含单元阵列的dlarray

您可以指定PARAMS作为使用单元阵列,结构或表,或嵌套单元阵列或结构为网络可以学习的参数的容器。单元阵列内的可学习参数,结构或表必须dlarray数据类型的或数值要么

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

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

损失的梯度,指定为dlarray,数字阵列,单元阵列,结构,或一个表。

的具体形式毕业取决于在输入网络或可学习的参数上。下表所示为所需要的格式毕业可能的输入sgdmupdate

输入 可学习的参数 渐变
dlnet dlnet.Learnables参数变量。该变量由包含每个可学习的参数作为单元阵列的dlarray 表使用相同的数据类型,变量和排序为dlnet.Learnables毕业必须有一个变量由包含每个可学习参数的梯度单元阵列。
PARAMS dlarray dlarray具有相同的数据类型和排序为PARAMS
数值数组 数值数组相同的数据类型和排序为PARAMS
单元阵列 单元阵列具有相同的数据类型,结构,和订货如PARAMS
结构体 具有相同的数据类型,字段和排序为结构PARAMS
参数变量。该变量必须由包含每个可学习的参数作为单元阵列的dlarray 表具有相同的数据类型,变量和排序为PARAMS毕业必须有一个变量由包含每个可学习参数的梯度单元阵列。

您可以获取毕业从调用dlfeval计算结果包含对通话功能dlgradient。欲了解更多信息,请参阅使用自动分化深度学习工具箱

参数的速度,指定为空数组,一个dlarray,数字阵列,单元阵列,结构,或一个表。

的具体形式VEL取决于在输入网络或可学习的参数上。下表所示为所需要的格式VEL可能的输入sgdmpdate

输入 可学习的参数 速度
dlnet dlnet.Learnables参数变量。该变量由包含每个可学习的参数作为单元阵列的dlarray 表使用相同的数据类型,变量和排序为dlnet.LearnablesVEL必须有一个变量由包含每个可学习参数的速度单元阵列。
PARAMS dlarray dlarray具有相同的数据类型和排序为PARAMS
数值数组 数值数组相同的数据类型和排序为PARAMS
单元阵列 单元阵列具有相同的数据类型,结构,和订货如PARAMS
结构体 具有相同的数据类型,字段和排序为结构PARAMS
参数变量。该变量必须由包含每个可学习的参数作为单元阵列的dlarray 表具有相同的数据类型,变量和排序为PARAMSVEL必须有一个变量由包含每个可学习参数的速度单元阵列。

如果您指定VEL作为一个空数组,该函数假定以相同的方式作为用于在一系列的迭代的第一更新没有先前的速度和运行。为了迭代更新可以学习的参数,使用VEL以前调用的输出sgdmupdate作为VEL输入。

学习率,指定为正标量。默认值learnRate0.01

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

动量,指定为之间的正标量01。默认值动量0.9

输出参数

全部收缩

网络,返回为dlnetwork目的。

功能更新dlnet.Learnables财产dlnetwork目的。

更新后的网络可以学习的参数,返回为dlarray,数字阵列,单元阵列,结构,或具有一个表包含网络的更新的参数可学习变量。

更新速度参数,返回为dlarray,数字阵列,单元阵列,结构,或一个表。

更多关于

全部收缩

随机梯度下降动量

该函数使用随机梯度下降动量算法更新可以学习的参数。欲了解更多信息,请参阅随机梯度下降的定义与下势头算法随机梯度下降trainingOptions参考页。

扩展功能

介绍了在R2019b