当你训练一个深度学习循环模型与一个定制的培训,软件最小化损失对可学的参数。把损失减小到最低限度,软件使用渐变的损失就可学会的参数。计算这些梯度使用自动分化,您必须定义一个模型梯度函数。
为一个例子,演示如何训练与深度学习模型dlnetwork
对象,看到列车网络的使用自定义训练循环。一个例子,演示如何培训深入学习模型定义为一个函数,看看列车网络的使用模型的功能。
dlnetwork
对象如果你有一个深度学习模型定义为一个dlnetwork
对象,然后创建一个模型梯度函数需要的dlnetwork
对象作为输入。
指定为一个模型dlnetwork
对象,创建一个函数的形式梯度= modelGradients (dlnet dlX T)
,在那里dlnet
是网络,dlX
是网络的输入,T
包含目标,梯度
包含返回的梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,策划培训发展指标)。
例如,这个函数返回指定的梯度和交叉熵损失dlnetwork
对象dlnet
,输入数据dlX
,目标T
。
函数(渐变,亏损)= modelGradients (dlnet dlX T)%通过dlnetwork转发数据对象。海底=前进(dlnet dlX);%计算损失。损失= crossentropy(海底,T);%计算梯度。梯度= dlgradient(损失、dlnet);结束
如果你有一个深学习模型定义为一个函数,然后创建一个模型梯度模型可学的带参数的函数作为输入。
指定为一个函数模型,创建一个函数的形式梯度= modelGradients(参数、dlX T)
,在那里参数
包含可学的参数,dlX
模型的输入,T
包含目标,梯度
包含返回的梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,策划培训发展指标)。
例如,这个函数返回梯度和深度学习模型的熵损失函数模型
用指定的参数可学的参数
,输入数据dlX
,目标T
。
函数(渐变,亏损)= modelGradients(参数、dlX T)%数据通过模型函数。海底=模型(参数,dlX);%计算损失。损失= crossentropy(海底,T);%计算梯度。梯度= dlgradient(损失、参数);结束
评估模型梯度使用自动分化、使用dlfeval
函数,它启用了自动分化的评价函数。输入的第一dlfeval
,通过模型梯度函数指定为一个函数处理。下面的输入,通过梯度函数所需的变量模型。的输出dlfeval
函数,指定相同的输出模型梯度函数。
例如,评估模型梯度函数modelGradients
与一个dlnetwork
对象dlnet
,输入数据dlX
,目标T
,并返回模型梯度和损失。
(渐变,亏损)= dlfeval (@modelGradients, dlnet dlX T);
同样,评估模型梯度函数modelGradients
使用一个模型函数可学的参数指定的结构参数
,输入数据dlX
,目标T
,并返回模型梯度和损失。
(渐变,亏损)= dlfeval (@modelGradients、参数dlX T);
更新使用梯度可学的参数,您可以使用以下功能。
函数 | 描述 |
---|---|
adamupdate |
使用自适应更新参数矩估计(亚当) |
rmspropupdate |
更新参数使用根均方传播(RMSProp) |
sgdmupdate |
更新参数使用随机梯度下降法和动力(个) |
dlupdate |
更新参数使用自定义函数 |
例如,更新的可学的参数dlnetwork
对象dlnet
使用adamupdate
函数。
[dlnet, trailingAvg trailingAvgSq] = adamupdate (dlnet、渐变…trailingAvg trailingAverageSq,迭代);
梯度
是输出模型的梯度函数,trailingAvg
,trailingAvgSq
,迭代
所需的hyperparameters吗adamupdate
函数。
同样,更新可学的参数模型的功能参数
使用adamupdate
函数。
(参数、trailingAvg trailingAvgSq) = adamupdate(参数、渐变…trailingAvg trailingAverageSq,迭代);
梯度
是输出模型的梯度函数,trailingAvg
,trailingAvgSq
,迭代
所需的hyperparameters吗adamupdate
函数。
当使用一个定制的培训深入学习模型训练循环,评估模型为每个mini-batch梯度和更新可学的参数。
使用这个代码片段显示了一个示例dlfeval
和adamupdate
在一个自定义训练循环功能。
迭代= 0;%循环时期。为时代= 1:numEpochs%在mini-batches循环。为i = 1: numIterationsPerEpoch迭代=迭代+ 1;% mini-batch做好准备。%……%梯度评估模型。(渐变,亏损)= dlfeval (@modelGradients, dlnet dlX T);%更新可学的参数。(参数、trailingAvg trailingAvgSq) = adamupdate(参数、渐变…trailingAvg trailingAverageSq,迭代);结束结束
为一个例子,演示如何训练与深度学习模型dlnetwork
对象,看到列车网络的使用自定义训练循环。一个例子,演示如何培训深入学习模型定义为一个函数,看看列车网络的使用模型的功能。
如果模型的实现梯度函数有一个问题,然后调用dlfeval
可以抛出一个错误。有时,当你使用dlfeval
功能,目前尚不清楚这行代码抛出错误。帮助定位错误,你可以试试下面的。
试着直接调用模型梯度函数(即不使用dlfeval
生成函数)与预期大小的输入。如果任何的代码抛出错误,错误消息可以提供额外的细节。请注意,当您不使用dlfeval
函数调用dlgradient
函数抛出一个错误。
%生成图像的输入数据。X =兰特((100年28日28日1),“单一”);dlX = dlarray (dlX);%生成一个炎热的目标数据进行编码。T = repmat(眼睛(10,“单一”),10 [1]);(渐变,亏损)= modelGradients (dlnet dlX T);
手动运行模型梯度函数内的代码生成与预期大小和检查的输入输出和任何错误消息。
例如,考虑下面的模型梯度函数。
函数(渐变,亏损)= modelGradients (dlnet dlX T)%通过dlnetwork转发数据对象。海底=前进(dlnet dlX);%计算损失。损失= crossentropy(海底,T);%计算梯度。梯度= dlgradient(损失、dlnet);结束
检查模型梯度函数通过运行以下代码。
%生成图像的输入数据。X =兰特((100年28日28日1),“单一”);dlX = dlarray (dlX);%生成一个炎热的目标数据进行编码。T = repmat(眼睛(10,“单一”),10 [1]);%检查前进传球。海底=前进(dlnet dlX);%检查损失计算。损失= crossentropy (dlX, T)