dlupdate
更新参数使用自定义函数
语法
描述
更新的可学的参数netUpdated
= dlupdate (有趣的
,净
)dlnetwork
对象净
通过评估函数有趣的
每次可学的参数作为输入。有趣的
是一个函数句柄函数接受一个参数数组作为输入参数,并返回一个更新的参数数组。
例子
L1正则化与dlupdate
执行L1正则化参数梯度结构。
创建示例输入数据。
dlX = dlarray (rand (100100 3),SSC的);
初始化可学的卷积操作的参数。
参数个数。重量= dlarray(兰德(10、10 3 50));参数个数。偏见= dlarray(兰德(50,1));
计算梯度使用helper函数卷积运算convGradients
定义在这个例子。
梯度= dlfeval (@convGradients、dlX params);
定义正则化因子。
L1Factor = 0.001;
创建一个匿名函数的梯度。通过使用一个匿名函数通过函数标量常数,可以避免扩大恒定值相同的大小和结构作为参数变量。
param L1Regularizer = @(研究生)毕业生+ L1Factor。*标志(参数);
使用dlupdate
应用正则化函数的梯度。
梯度= dlupdate (L1Regularizer、渐变参数);
的梯度毕业生
现在根据函数正规化L1Regularizer
。
convGradients
函数
的convGradients
helper函数卷积操作的可学的参数和mini-batch输入数据dlX
,并返回梯度对可学的参数。
函数梯度= convGradients (dlX params)海底= dlconv (dlX, params.Weights params.Bias);海底=总和(海底,“所有”);梯度= dlgradient(海底,params);结束
使用dlupdate
培训网络使用自定义更新功能
使用dlupdate
训练一个网络使用一个自定义更新函数,实现了随机梯度下降算法(没有动力)。
负荷训练数据
加载数字训练数据。
[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输入数据与相应的标签,并返回损失和损失的梯度对可学的参数。
定义了随机梯度下降功能
创建一个helper函数sgdFunction
年底上市,这个例子。函数需要的参数和梯度的损失的参数,并返回更新后的参数使用随机梯度下降算法,表示为
在哪里 是迭代数, 是学习速率, 是参数向量, 损失函数。
指定培训选项
培训期间指定要使用的选项。
miniBatchSize = 128;numEpochs = 30;numObservations =元素个数(TTrain);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);
指定学习速率。
learnRate = 0.01;
列车网络的
初始化培训进展阴谋。
图C = colororder;lineLossTrain = animatedline (“颜色”C (:));ylim([0正])包含(“迭代”)ylabel (“损失”网格)在
火车模型使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。通过调用更新网络参数dlupdate
与函数sgdFunction
定义在这个例子。在每个时代,显示培训进展。
火车在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);%更新网络参数使用SGD算法中定义% sgdFunction helper函数。梯度updateFcn = @(净)sgdFunction(净、渐变learnRate);网= dlupdate (updateFcn、净、梯度);%显示培训进展。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.8972
损失函数模型
辅助函数modelLoss
需要一个dlnetwork
对象净
和mini-batch输入数据X
与相应的标签T
,并返回损失和损失的梯度对可学的参数净
。自动计算梯度,使用dlgradient
函数。
函数(损失,梯度)= modelLoss(净,X, T) Y =前进(净,X);损失= crossentropy (Y, T);梯度= dlgradient(损失、net.Learnables);结束
随机梯度下降函数
辅助函数sgdFunction
需要可学的参数参数
,损失的梯度就可学会的参数,和学习速率learnRate
,并返回更新后的参数使用随机梯度下降算法,表示为
在哪里 是迭代数, 是学习速率, 是参数向量, 损失函数。
函数参数= sgdFunction参数(参数、渐变learnRate) =参数- learnRate。*渐变;结束
输入参数
净
- - - - - -网络
dlnetwork
对象
网络,作为一个指定dlnetwork
对象。
功能更新可学的
财产的dlnetwork
对象。net.Learnables
是一个表有三个变量:
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
参数个数
- - - - - -网络可学的参数
dlarray
|数字数组|单元阵列|结构|表
网络可学的参数,指定为一个dlarray
细胞,一个数值数组,数组,一个结构或一个表。
如果您指定参数个数
作为一个表,它必须包含以下三个变量。
层
——层名称指定为一个字符串标量。参数
参数名称,指定为一个字符串标量。价值
值的参数,指定为一个细胞包含一个数组dlarray
。
您可以指定参数个数
作为一个容器的使用单元阵列可学的你的网络参数,结构,或表,或嵌套细胞数组或结构。细胞内的可学的参数数组,结构,或表必须dlarray
或数值数据类型双
或单
。
输入参数A1,…,一个
必须提供相同的数据类型,排序,和字段(结构)或变量(表)参数个数
。
数据类型:单
|双
|结构体
|表
|细胞
A1,…,一个
- - - - - -额外的输入参数
dlarray
|数字数组|单元阵列|结构|表
额外的输入参数有趣的
,指定为dlarray
对象、数字阵列单元数组,结构,或表价值
变量。
的具体形式A1,…,一个
取决于输入网络或可学的参数。下面的表显示了所需的格式A1,…,一个
可能的输入dlupdate
。
输入 | 可学的参数 | A1,…,一个 |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。A1,…,一个 必须有一个价值 包含额外的变量组成的细胞数组函数的输入参数有趣的 适用于每个可学的参数。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 。 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 。 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 。 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 。 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和排序参数个数 。A1,…,一个 必须有一个价值 包含额外的变量组成的细胞数组函数的输入参数有趣的 适用于每个可学的参数。 |
输出参数
netUpdated
——更新网络
dlnetwork
对象
网络,作为一个返回dlnetwork
对象。
功能更新可学的
财产的dlnetwork
对象。
参数个数
——更新网络可学的参数
dlarray
| |数字数组单元阵列| |表结构
网络可学的参数更新,作为一个返回dlarray
细胞,一个数值数组,数组,结构,或一个表价值
包含网络的更新可学的参数变量。
X1,…, Xm
——额外的输出参数
dlarray
| |数字数组单元阵列| |表结构
额外的输出参数的函数有趣的
,在那里有趣的
是一个函数句柄函数返回多个输出,返回dlarray
对象、数字阵列单元数组,结构,或表价值
变量。
的具体形式X1,…, Xm
取决于输入网络或可学的参数。下面的表显示了返回的格式X1,…, Xm
可能的输入dlupdate
。
输入 | 可学的参数 | X1,…, Xm |
---|---|---|
净 |
表net.Learnables 包含层 ,参数 ,价值 变量。的价值 变量由细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同数据类型、变量和订购net.Learnables 。X1,…, Xm 有一个价值 包含额外的变量组成的细胞阵列输出参数的函数有趣的 对每个可学的应用参数。 |
参数个数 |
dlarray |
dlarray 相同的数据类型和顺序参数个数 。 |
数字数组 | 数字数组具有相同数据类型和顺序参数个数 。 |
|
单元阵列 | 单元阵列具有相同的数据类型,结构,和订购参数个数 。 |
|
结构 | 结构相同的数据类型、字段和订购参数个数 。 |
|
表层 ,参数 ,价值 变量。的价值 变量必须包含细胞包含每个可学的参数作为数组dlarray 。 |
表具有相同的数据类型,变量。和订购参数个数 。X1,…, Xm 有一个价值 包含额外的变量组成的细胞阵列输出参数的函数有趣的 对每个可学的应用参数。 |
扩展功能
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
使用笔记和限制:
当下列至少一个输入参数
gpuArray
或者一个dlarray
基础数据的类型gpuArray
,这个函数在GPU上运行。参数个数
A1,…,一个
有关更多信息,请参见运行在GPU MATLAB函数(并行计算工具箱)。
版本历史
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。