文档帮助中心
dlupdate
使用自定义功能更新参数
dlnet dlnet = dlupdate(有趣)
PARAMS = dlupdate(乐趣,则params)
[___] = dlupdate(乐趣,___A1,…)
[___,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 (rand (100100 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(海底,params);结束
利用dlupdate使用自定义更新功能来训练网络实现的随机梯度下降算法(没有动量)。
负荷训练数据
加载数字训练数据。
[XTrain,YTrain] = digitTrain4DArrayData;类=类别(YTrain);numClasses = numel(类);
定义网络
定义网络架构,并使用指定的平均图像价值“的意思是”选项在图像输入层。
“的意思是”
图层= [imageInputLayer([28281]),'名称',“输入”,“的意思是”意味着(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,列于本例末尾。的函数参数和paramGradient中,可学习参数和损失相对于该参数,分别与返回更新的参数使用随机梯度下降算法的梯度,表示为
sgdFunction
参数
paramGradient
θ 升 + 1 = θ - α ∇ Ë ( θ 升 )
哪里 升 是迭代次数, α > 0 是学习率, θ 是参数向量,并 Ë ( θ ) 为损失函数。
指定培训选项
指定在培训期间使用的选项。
miniBatchSize = 128;numEpochs = 20;numObservations = numel(YTrain);numIterationsPerEpoch =地板(numObservations./miniBatchSize);
在GPU上训练,如果有的话。使用GPU需要并行计算工具箱™和CUDA®启用NVIDIA®GPU计算能力3.0或更高。
执行环境=“汽车”;
初始化速度参数。
learnRate = 0.001;
初始化训练进度情节。
地块=“训练进度”;如果地块==“训练进度”迭代= 1;图lineLossTrain = animatedline;xlabel(“总迭代”)ylabel(“失利”)结束
列车网络
培养使用自定义的训练循环模型。对于每一个时代,洗牌对数据的小批量数据和循环。更新通过调用网络参数dlupdate与功能sgdFunction定义在本例的末尾。在每个epoch结束时,显示训练进度。
对于历元= 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。如果(executionEnvironment = =“汽车”&& 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');如果(executionEnvironment = =“汽车”&& 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需要参数和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コマンドウィンドウに以下を入力すると,このコマンドを実行できます。
选择一个网站,以获得翻译的内容,其中可看到当地的活动和优惠。根据您的位置,我们建议您选择:。
您还可以选择从下面的列表中的网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。
联系你当地的办公室