文件帮助中心
dlupdate.
使用自定义函数更新参数
dlnet=dlupdate(乐趣,dlnet)
params = dlupdate(有趣,params)
[___] = dlupdate(有趣,___A1,…,An)
[___, X1,……那Xm] = dlupdate(fun,___)
例子
dlnet= dlupdate (有趣的那dlnet)更新可知的参数数据链路网络目的dlnet通过评估功能有趣的将每个可学习参数作为输入。有趣的函数的函数句柄,该函数将一个参数数组作为输入参数,并返回更新的参数数组。
dlnet= dlupdate (有趣的那dlnet)
dlnet
有趣的
数据链路网络
参数= dlupdate (有趣的那参数)更新中的可学习参数参数通过评估功能有趣的将每个可学习参数作为输入。
参数= dlupdate (有趣的那参数)
参数
[___] = 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(兰特(100100,3),'SSC');
初始化卷积操作的可学习参数。
参数个数。重量= dlarray(兰德(10、10 3 50));参数个数。偏见= dlarray(兰德(50,1));
使用辅助函数计算卷积运算的梯度convGradients,在此示例结束时定义。
convGradients
毕业生= dlfeval (@convGradients、dlX params);
定义正则化因子。
L1Factor = 0.001;
创建一个匿名函数来规范梯度。通过使用匿名函数向函数传递标量常量,可以避免将常量值扩展为与参数变量相同的大小和结构。
l1regularizer = @(毕业,param)毕业+ l1factor。*符号(param);
使用dlupdate.将正则化函数应用于每个渐变。
Grads = Dlupdate(L1Regularizer,Grads,Params);
的梯度毕业生现在已根据函数对其进行正则化L1Regularizer.。
毕业生
L1Regularizer.
convGradients函数
这convGradients辅助函数接受卷积操作的可学习参数和一小批输入数据DLX.,并相对于可知参数返回梯度。
DLX.
函数d = dlconv(dlX,params. weights,params. bias);海底=总和(海底,'全部');梯度=dlgradient(dlY,params);结尾
使用dlupdate.使用自定义更新函数培训网络,该函数实现随机梯度下降算法(没有势头)。
负荷训练数据
加载数字训练数据。
[xtrain,ytrain] = DigitTrain4darraydata;Classes =类别(YTrain);numclasses = numel(类);
定义网络
定义网络架构并使用该网络架构指定平均图像值“中庸”图像输入层中的选项。
“中庸”
层=[imageInputLayer([28 1],'姓名'那'输入'那“中庸”,平均(XTrain,4))卷积2层(5,20,'姓名'那“conv1”)剥离('姓名'那“relu1”)卷积2层(3,20,“填充”1.'姓名'那'conv2')剥离('姓名'那“relu2”)卷积2层(3,20,“填充”1.'姓名'那'conv3')剥离('姓名'那“relu3”) fullyConnectedLayer (numClasses'姓名'那“俱乐部”));lgraph = layerGraph(层);
创建一个数据链路网络对象从图层图中删除。
dlnet = dlnetwork(3);
定义模型渐变函数
创建helper函数模型梯度,列在本例末尾。该函数a数据链路网络目的dlnet以及一小批输入数据DLX.有相应的标签y,并返回关于可学习参数的丢失和损失的渐变dlnet。
模型梯度
y
定义随机梯度下降函数
创建helper函数sgdFunction,列在本例末尾。该函数param和paramGradient,可学习参数和相对于该参数的损耗的渐变,并使用随机梯度血换算法返回更新的参数,表示为
sgdFunction
param
paramGradient
θ L. + 1 = θ - α ∇ E. ( θ L. )
在哪里 L. 是迭代号码, α > 0. 是学习率, θ 是参数矢量,还有 E. ( θ ) 是损失函数。
指定培训选项
指定培训期间要使用的选项。
miniBatchSize = 128;numEpochs = 20;numObservations =元素个数(YTrain);numIterationsPerEpoch =地板(numObservations. / miniBatchSize);
在GPU上训练(如果有)。使用GPU需要并行计算工具箱™ 以及支持CUDA®的NVIDIA®GPU,具有3.0或更高的计算能力。
executionenvironment =“自动”;
初始化速度参数。
learnRate=0.001;
初始化培训进度图。
plots =.“训练进步”;如果情节= =“训练进步”迭代= 1;figure lineLossTrain = animatedline;包含(“总迭代”) ylabel (“损失”)结尾
火车网络
使用自定义训练循环训练模型。对于每个epoch,洗牌数据并在小批数据上循环。通过调用来更新网络参数dlupdate.用这个功能sgdFunction在本例末尾定义。在每个历元末尾,显示培训进度。
为了时代= 1:numEpochs%洗牌数据。idx = randperm(元素个数(YTrain));XTrain = XTrain (:,:,:, idx);YTrain = YTrain (idx);为了我= 1:numIterationsPerEpoch%读取迷你批次数据并将标签转换为虚拟%变量。IDX =(I-1)*小匹匹配+ 1:i *小匹匹配;x = XTrain(::::,IDX);y =零(numcrasses,minibatchsize,“单身”);为了c = 1:numclasses y(c,ytrain(idx)==类(c))= 1;结尾%将小批量数据转换为dlarray。dlx = dlarray(单(x),“SSCB”);%如果在GPU上培训,则将数据转换为GPUArray。如果(b)执行环境==“自动”&& canusegpu)||executionenvironment ==.“图形”dlX = gpuArray (dlX);结尾使用dlfeval和%MASEMGRADENTERS帮助函数。[毕业,损失] = dlfeval(@ maposgradients,dlnet,dlx,y);%使用中定义的SGD算法更新网络参数%sgdFunction辅助函数。dlnet = dlupdate(@ sgdfunction,dlnet,毕业);%显示培训进度。如果情节= =“训练进步”Addpoints(LineLoStrain,迭代,Double(收集(提取数据(丢失))))标题(“训练期间的损失:历元-+ epoch +“迭代——”+ i)绘制迭代=迭代+ 1;结尾结尾结尾
测试网络
通过将测试集上的预测与真实标签进行比较,检验模型的分类精度。
[XTest,YTest]=Digittest4ArrayData;
将数据转换为dlarray.具有维度格式“SSCB”。对于GPU预测,还将数据转换为agpuArray。
dlarray.
“SSCB”
gpuArray
dlxtest = dlarray(xtest,“SSCB”);如果(b)执行环境==“自动”&& canusegpu)||executionenvironment ==.“图形”dlXTest = gpuArray (dlXTest);结尾
使用a对图像进行分类数据链路网络对象,使用预测函数查找得分最高的类。
预测
dlypred =预测(Dlnet,dlxtest);[〜,idx] = max(提取数据(dlypred),[],1);Ypred =类(IDX);
评估分类准确度。
精度=均值(Ypred == ytest)
精度=0.7282
模型梯度函数
辅助函数模型梯度需要一个数据链路网络目的dlnet以及一小批输入数据DLX.有相应的标签y,并返回关于可学习参数的丢失和损失的渐变dlnet。要自动计算渐变,请使用dlgradient功能。
dlgradient
函数[gradient,loss] = modelGradients(dlnet,dlX,Y)dlYPred = softmax (dlYPred);损失= crossentropy (dlYPred Y);梯度= dlgradient(损失、dlnet.Learnables);结尾
随机梯度下降功能
辅助函数sgdFunction需要param和paramGradient,分别得到一个可学习参数和损失相对于该参数的梯度,并使用随机梯度下降算法返回更新后的参数,表示为
函数param = sgdfunction(param,paramgradient)学习= 0.01;param = param - 学习。* paramgradient;结尾
要应用于可学习参数的函数,指定为函数句柄。
dlupate评估有趣的使用每个网络被动参数作为输入。有趣的根据有多少次评估,因为有学习参数阵列dlnet或参数。
dlupate
网络,指定为数据链路网络对象。
函数更新dlnet.learnables.财产数据链路网络对象。dlnet.learnables.是一个带有三个变量的表:
dlnet.learnables.
层—层名,指定为字符串标量。
层
范围-参数名称,指定为字符串标量。
范围
价值—parameter的值,指定为包含a的单元格数组dlarray.。
价值
网络学习参数,指定为adlarray.,数值数组、单元格数组、结构或表。
如果您指定参数作为一个表,它必须包含以下三个变量。
您可以指定参数使用单元格数组、结构或表或嵌套单元格数组或结构作为网络的可学习参数的容器。单元格数组、结构或表中的可学习参数必须为dlarray.或数据类型的数值双重的或单。
双重的
单
输入参数研究生必须提供完全相同的数据类型,排序和字段(用于结构)或变量(表格)参数。
研究生
数据类型:单|双重的|塑造|表格|细胞
塑造
表格
细胞
额外的输入参数有趣的,指明为dlarray.对象,数字阵列,单元格阵列,结构或表格价值变量。
确切的形式A1,…,一个取决于输入网络或可学习参数。下表显示了A1,…,一个对于可能的输入dlupdate.。
网络,作为一个返回数据链路网络对象。
函数更新dlnet.learnables.财产数据链路网络对象。
更新了网络学习参数,返回为adlarray.,数值数组、单元格数组、结构或带有价值包含网络更新的可学习参数的变量。
来自函数的其他输出参数有趣的哪里有趣的是返回多个输出的函数的函数句柄,返回为dlarray.对象,数字阵列,单元格阵列,结构或表格价值变量。
确切的形式X1,…,Xm取决于输入网络或学习参数。下表显示了返回的格式X1,…,Xm对于可能的输入dlupdate.。
使用说明和限制:
当以下至少一个输入参数中是一个gpuArray或者一个dlarray.具有类型的底层数据gpuArray,此函数在GPU上运行。
有关详细信息,请参阅在GPU上运行matlab函数(并行计算工具箱)。
阿达木酯|dlarray.|dlfeval|dlgradient|数据链路网络|rmspropupdate|sgdmupdate.
阿达木酯
dlfeval
rmspropupdate
sgdmupdate.
您的系统上存在此示例的修改版本。是否改为打开此版本?
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。
联系当地办事处