文档帮助中心
dlupdate
使用自定义功能更新参数
dlnet = dlupdate(乐趣,dlnet)
PARAMS = dlupdate(乐趣,则params)
[___] = dlupdate(乐趣,___A1,...,An)的
[___,X1,...,XM] = dlupdate(乐趣,___)
例
dlnet= dlupdate(开玩笑,dlnet)更新的可学习的参数dlnetwork目的dlnet通过评估功能开玩笑与每个可学习参数作为输入。开玩笑是一个函数句柄采用一个参数数组作为输入参数,并返回更新的参数数组的函数。
dlnet= dlupdate(开玩笑,dlnet)
dlnet
开玩笑
dlnetwork
PARAMS= dlupdate(开玩笑,PARAMS)更新了可以学习的参数PARAMS通过评估功能开玩笑与每个可学习参数作为输入。
PARAMS= dlupdate(开玩笑,PARAMS)
PARAMS
[___] = dlupdate(开玩笑,___A1,...,一)还规定了额外的输入参数,除了在以前的语法输入参数,当开玩笑是一个函数句柄需要一个函数n + 1个输入值。
[___] = dlupdate(开玩笑,___A1,...,一)
A1,...,一
n + 1个
[___,X1,...,XM] = dlupdate(开玩笑,___)返回多个输出X1,...,XM什么时候开玩笑是一个函数句柄函数返回m + 1个输出值。
[___,X1,...,XM] = dlupdate(开玩笑,___)
X1,...,XM
m + 1个
全部收缩
上参数梯度的结构执行L1正规化。
创建示例的输入数据。
DLX = dlarray(兰特(100,100,3),'SSC');
初始化卷积运算的可以学习的参数。
params.Weights = dlarray(兰特(10,10,3,50));params.Bias = dlarray(兰特(50,1));
使用辅助函数计算卷积运算梯度convGradients在本实施例的端部限定。
convGradients
梯度= dlfeval(@ convGradients,DLX,则params);
定义则因子。
L1Factor = 0.001;
创建一个规则化的梯度匿名函数。通过使用匿名功能传递一个标量常数的函数,就可以避免扩大恒定值相同的尺寸和结构作为参数变量。
L1Regularizer = @(毕业,PARAM)毕业+ L1Factor *符号(PARAM)。
用dlupdate以正则化函数应用到每个梯度的。
梯度= dlupdate(L1Regularizer,梯度,则params);
在梯度毕业生现在根据功能正规化L1Regularizer。
毕业生
L1Regularizer
convGradients功能
该convGradients辅助函数使用卷积运算的可以学习的参数和一个小批量的输入数据的DLX,并返回梯度相对于所述可学习参数。
DLX
功能梯度= convGradients(DLX,则params)DLY = dlconv(DLX,params.Weights,params.Bias);DLY =总和(DLY,'所有');梯度= dlgradient(DLY,则params);结束
用dlupdate使用自定义更新功能来训练网络实现的随机梯度下降算法(没有动量)。
负荷训练数据
负荷训练数据的位数。
[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。
modelGradients
ÿ
定义随机梯度下降功能
创建辅助功能sgdFunction在本实施例的末尾列出。该函数PARAM和paramGradient中,可学习参数和损失相对于该参数,分别与返回更新的参数使用随机梯度下降算法的梯度,表示为
sgdFunction
PARAM
paramGradient
θ 升 + 1 = θ - α ∇ Ë ( θ 升 )
哪里 升 是迭代次数, α > 0 是学习率, θ 是参数向量,并 Ë ( θ ) 是损失函数。
指定培训选项
指定培训期间要使用的选项。
miniBatchSize = 128;numEpochs = 20;numObservations = numel(YTrain);numIterationsPerEpoch =地板(numObservations./miniBatchSize);
在GPU上火车,如果可用。使用GPU需要并行计算工具箱™和启用CUDA®GPUNVIDIA®计算能力3.0或更高版本。
执行环境=“汽车”;
初始化速度参数。
learnRate = 0.001;
初始化训练进度情节。
地块=“训练进度”;如果地块==“训练进度”迭代= 1;图lineLossTrain = animatedline;xlabel(“总迭代”)ylabel(“失利”)结束
列车网络
培养使用自定义的训练循环模型。对于每一个时代,洗牌对数据的小批量数据和循环。更新通过调用网络参数dlupdate与功能sgdFunction在本实施例的端部限定。在每个历元的端部,显示训练进度。
对于历元= 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);%更新使用SGD算法的网络参数中所定义的%sgdFunction助手功能。dlnet = dlupdate(@ sgdFunction,dlnet,毕业);%显示训练进度。如果地块==“训练进度”addpoints(lineLossTrain,迭代,双(聚(ExtractData由(亏损))))标题(“损失训练期间:时代 - ”+划时代+“迭代 - ”+ I)的DrawNow迭代=迭代+ 1;结束结束结束
测试网络
通过在测试集与真标签的预测比较测试模型的分类精度。
[XTEST,YTest] = digitTest4DArrayData;
转换数据到dlarray与尺寸格式'SSCB'。对于GPU的预测,也将数据转换为gpuArray。
dlarray
'SSCB'
gpuArray
dlXTest = dlarray(XTEST,'SSCB');如果(执行环境==“汽车”&& canUseGPU)||执行环境==“GPU”dlXTest = gpuArray(dlXTest);结束
要使用图像分类dlnetwork对象,请使用预测工作,并找到得分最高的类。
预测
dlYPred =预测(dlnet,dlXTest);[〜,IDX] = MAX(ExtractData由(dlYPred),[],1);YPred =类(IDX);
评估分类精度。
精度=平均值(YPred == YTest)
精度= 0.7282
型号渐变功能
助手功能modelGradients需要dlnetwork目的dlnet和小批量的输入数据的DLX与相应的标签ÿ,返回损耗和损失相对于在梯度的可学习参数dlnet。自动计算梯度,使用dlgradient功能。
dlgradient
功能[梯度,损耗] = modelGradients(dlnet,DLX,Y)= dlYPred向前(dlnet,DLX);dlYPred = SOFTMAX(dlYPred);损耗= crossentropy(dlYPred,Y);梯度= dlgradient(损失,dlnet.Learnables);结束
随机梯度下降功能
助手功能sgdFunction需要PARAM和paramGradient中,可学习参数和损失相对于分别该参数的梯度,并返回使用随机梯度下降算法更新的参数,表示为
功能PARAM = sgdFunction(PARAM,paramGradient)learnRate = 0.01;。PARAM =参数 - learnRate * paramGradient;结束
功能应用到可以学习的参数,指定为函数句柄。
dlupate评估板开玩笑与每个网络可学习参数作为输入。开玩笑被评价为因为有在可学习的参数的阵列多次dlnet要么PARAMS。
dlupate
网络,指定为dlnetwork目的。
功能更新dlnet.Learnables财产dlnetwork目的。dlnet.Learnables是三个变量的表:
dlnet.Learnables
层- 图层名称,指定为字符串标量。
层
参数- 参数名称,指定为字符串标量。
参数
值- 参数的值,指定为包含单元阵列的dlarray。
值
网络可学习参数,指定为dlarray,数字阵列,单元阵列,结构,或一个表。
如果您指定PARAMS为表,它必须包含以下三个变量。
您可以指定PARAMS作为使用单元阵列,结构或表,或嵌套单元阵列或结构为网络可以学习的参数的容器。单元阵列内的可学习参数,结构或表必须dlarray数据类型的或数值双要么单。
双
单
输入参数毕业必须提供完全相同的数据类型,排序和字段(结构)或变量(表)作为PARAMS。
毕业
数据类型:单|双|结构|表|细胞
结构
表
细胞
附加的输入参数开玩笑,指定为dlarray的物体,数字阵列,单元阵列,结构,或与表值变量。
的具体形式A1,...,一取决于在输入网络或可学习的参数上。下表所示为所需要的格式A1,...,一可能的输入dlupdate。
网络,返回为dlnetwork目的。
功能更新dlnet.Learnables财产dlnetwork目的。
更新后的网络可以学习的参数,返回为dlarray,数字阵列,单元阵列,结构,或具有一个表值包含网络的更新的参数可学习变量。
从该函数的附加输出参数开玩笑,其中开玩笑是一个函数句柄返回多个输出,返回作为函数dlarray的物体,数字阵列,单元阵列,结构,或与表值变量。
的具体形式X1,...,XM取决于在输入网络或可学习的参数上。下表显示的格式返回X1,...,XM可能的输入dlupdate。
使用注意事项和限制:
当以下输入参数的至少一个是一个gpuArray或dlarray类型的基础数据gpuArray,这个功能在GPU上运行。
欲了解更多信息,请参阅在GPU上运行MATLAB功能(并行计算工具箱)。
adamupdate|dlarray|dlfeval|dlgradient|dlnetwork|rmspropupdate|sgdmupdate
adamupdate
dlfeval
rmspropupdate
sgdmupdate
这个例子的修改版本的系统上存在。你要打开这个版本呢?
您单击对应于该MATLAB命令的链接:
在MATLAB命令窗口中输入它运行的命令。Web浏览器不支持MATLAB的命令。万博1manbetx
选择一个网站,以获得翻译的内容,其中可看到当地的活动和优惠。根据您的位置,我们建议您选择:。
您还可以选择从下面的列表中的网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。
请联系您当地的办事处