主要内容

定义模型梯度函数自定义训练循环

当你训练一个深度学习循环模型与一个定制的培训,软件最小化损失对可学的参数。把损失减小到最低限度,软件使用渐变的损失就可学会的参数。计算这些梯度使用自动分化,您必须定义一个模型梯度函数。

为一个例子,演示如何训练与深度学习模型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梯度和更新可学的参数。

使用这个代码片段显示了一个示例dlfevaladamupdate在一个自定义训练循环功能。

迭代= 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)

相关的话题