sgdmupdate
更新参数使用随机梯度下降法和动力(个)
语法
描述
更新网络可学的参数在一个定制的培训循环使用随机梯度下降法和动量(个)算法。
请注意
这个函数应用个优化算法来更新网络参数定义为自定义训练循环使用网络dlnetwork
对象或函数模型。如果你想训练一个网络定义为一个层
数组或作为一个LayerGraph
,使用以下功能:
创建一个
TrainingOptionsSGDM
对象使用trainingOptions
函数。使用
TrainingOptionsSGDM
对象的trainNetwork
函数。
例子
更新可学的参数使用sgdmupdate
执行一个更新的全球学习速率0.05
和动量的0.95
。
创建参数和参数渐变为数值型数组。
params =兰德(3、3、4);研究生= 1 (3、3、4);
初始化参数为第一个迭代速度。
韦尔= [];
指定自定义全球学习速率和动量的值。
learnRate = 0.05;动量= 0.95;
更新可学的参数使用sgdmupdate
。
(params,韦尔)= sgdmupdate (params,研究生,或者,learnRate,动量);
列车网络的使用sgdmupdate
使用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
对象。
功能更新可学的
财产的dlnetwork
对象。net.Learnables
是一个表有三个变量:
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
输入参数研究生
必须是一个表的形式一样吗net.Learnables
。
参数个数
- - - - - -网络可学的参数
dlarray
|数字数组|单元阵列|结构|表
网络可学的参数,指定为一个dlarray
细胞,一个数值数组,数组,一个结构或一个表。
如果您指定参数个数
作为一个表,它必须包含以下三个变量。
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
您可以指定参数个数
作为一个容器的使用单元阵列可学的你的网络参数,结构,或表,或嵌套细胞数组或结构。细胞内的可学的参数数组,结构,或表必须dlarray
或数值数据类型双
或单
。
输入参数研究生
必须提供相同的数据类型,排序,和字段(结构)或变量(表)参数个数
。
数据类型:单
|双
|结构体
|表
|细胞
研究生
- - - - - -渐变的损失
dlarray
|数字数组|单元阵列|结构|表
渐变的损失,作为一个指定dlarray
细胞,一个数值数组,数组,一个结构或一个表。
的具体形式研究生
取决于输入网络或可学的参数。下面的表显示了所需的格式研究生
可能的输入sgdmupdate
。
输入 | 可学的参数 | 梯度 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。研究生 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的梯度。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购参数个数 。研究生 必须有一个价值 变量组成的细胞阵列包含每个可学的参数的梯度。 |
你可以获得研究生
从一个调用dlfeval
评估包含调用一个函数dlgradient
。有关更多信息,请参见在深度学习工具箱使用自动分化。
韦尔
- - - - - -速度参数
[]
|dlarray
|数字数组|单元阵列|结构|表
速度参数,指定为一个空数组dlarray
细胞,一个数值数组,数组,一个结构或一个表。
的具体形式韦尔
取决于输入网络或可学的参数。下面的表显示了所需的格式韦尔
可能的输入sgdmpdate
。
输入 | 可学的参数 | 速度 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。韦尔 必须有一个价值 变量组成的细胞阵列包含每个可学的的速度参数。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购参数个数 。韦尔 必须有一个价值 变量组成的细胞阵列包含每个可学的的速度参数。 |
如果您指定韦尔
作为一个空数组,函数不承担任何先前的速度和运行相同的方式第一更新在一系列的迭代。更新可学的迭代参数,使用韦尔
前一个调用的输出sgdmupdate
随着韦尔
输入。
learnRate
- - - - - -全球学习速率
0.01
(默认)|积极的标量
学习速率,指定为一个积极的标量。的默认值learnRate
是0.01
。
如果你指定的网络参数dlnetwork
对象,每个参数的学习速率是全球学习速率乘以相应的学习速率因子属性中定义的网络层。
动力
- - - - - -动力
0.9
(默认)|积极的标量之间0
和1
动力,指定为一个积极的标量之间0
和1
。的默认值动力
是0.9
。
输出参数
netUpdated
——更新网络
dlnetwork
对象
网络,作为一个返回dlnetwork
对象。
功能更新可学的
财产的dlnetwork
对象。
参数个数
——更新网络可学的参数
dlarray
| |数字数组单元阵列| |表结构
网络可学的参数更新,作为一个返回dlarray
细胞,一个数值数组,数组,结构,或一个表价值
包含网络的更新可学的参数变量。
韦尔
——更新速度参数
dlarray
| |数字数组单元阵列| |表结构
参数更新速度,作为一个返回dlarray
细胞,一个数值数组,数组,一个结构或一个表。
更多关于
随机梯度下降法与动力
函数使用随机梯度下降法与动量算法更新可学的参数。有关更多信息,请参见随机梯度下降法的定义与动量算法随机梯度下降法在trainingOptions
参考页面。
扩展功能
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
使用笔记和限制:
当下列至少一个输入参数
gpuArray
或者一个dlarray
基础数据的类型gpuArray
,这个函数在GPU上运行。研究生
参数个数
有关更多信息,请参见运行在GPU MATLAB函数(并行计算工具箱)。
版本历史
介绍了R2019b
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。