主要内容

定义模型损失函数自定义训练循环

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

为一个例子,演示如何训练与深度学习模型dlnetwork对象,看到列车网络的使用自定义训练循环。一个例子,演示如何培训深入学习模型定义为一个函数,看看列车网络的使用模型的功能

定义为创建模型损失函数模型dlnetwork对象

如果你有一个深度学习模型定义为一个dlnetwork对象,然后创建一个模型的损失函数dlnetwork对象作为输入。

指定为一个模型dlnetwork对象,创建一个函数的形式(损失,梯度)= modelLoss(净,X, T),在那里是网络,X是网络的输入,T包含目标,损失梯度分别返回的损失和梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,更新网络状态)。

例如,这个函数返回叉损失和损失的梯度可学的参数指定的dlnetwork对象给定的输入数据X,目标T

函数(损失,梯度)= modelLoss(净,X, T)%通过dlnetwork转发数据对象。Y =前进(净,X);%计算损失。损失= crossentropy (Y, T);%计算梯度。梯度= dlgradient(损失、net.Learnables);结束

创建模型损失函数模型定义为函数

如果你有一个深学习模型定义为一个函数,然后创建一个模型损失函数,该模型可学的参数作为输入。

指定为一个函数模型,创建一个函数的形式(损失,梯度)= modelLoss(参数X, T),在那里参数包含可学的参数,X模型的输入,T包含目标,损失梯度分别返回的损失和梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,更新后的模型状态)。

例如,这个函数返回叉损失和损失的梯度对可学的参数参数给定的输入数据X,目标T

函数(损失,梯度)= modelLoss(参数X, T)%数据通过模型函数。Y =模型(参数,X);%计算损失。损失= crossentropy (Y, T);%计算梯度。梯度= dlgradient(损失、参数);结束

评估模型的损失函数

评估使用自动分化模型损失函数,使用dlfeval函数,它启用了自动分化的评价函数。输入的第一dlfeval,通过模型损失函数指定为一个函数处理。下列输入、传递损失函数所需的变量模型。的输出dlfeval函数,指定相同的输出作为损失函数模型。

例如,评估损失函数模型modelLoss与一个dlnetwork对象,输入数据X,目标T,并返回模型损失和梯度。

(损失,梯度)= dlfeval (@modelLoss,净,X, T);

同样,评估损失函数模型modelLoss使用一个模型函数可学的参数指定的结构参数,输入数据X,目标T,并返回模型损失和梯度。

(损失,梯度)= dlfeval (@modelLoss、参数X, T);

更新使用梯度可学的参数

更新使用梯度可学的参数,您可以使用以下功能。

函数 描述
adamupdate 使用自适应更新参数矩估计(亚当)
rmspropupdate 更新参数使用根均方传播(RMSProp)
sgdmupdate 更新参数使用随机梯度下降法和动力(个)
lbfgsupdate 更新参数使用内存有限bfg (L-BFGS)
dlupdate 更新参数使用自定义函数

例如,更新的可学的参数dlnetwork对象使用adamupdate函数。

[净,trailingAvg trailingAvgSq] = adamupdate(净、渐变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 (@modelLoss,净,X, T);%更新可学的参数。(参数、trailingAvg trailingAvgSq) = adamupdate(参数、渐变trailingAvg trailingAverageSq,迭代);结束结束

为一个例子,演示如何训练与深度学习模型dlnetwork对象,看到列车网络的使用自定义训练循环。一个例子,演示如何培训深入学习模型定义为一个函数,看看列车网络的使用模型的功能

调试模型损失函数

如果模型的实现损失函数有一个问题,然后调用dlfeval可以抛出一个错误。有时,当你使用dlfeval功能,目前尚不清楚这行代码抛出错误。帮助定位错误,你可以试试下面的。

直接调用模型损失函数

试着直接调用模型损失函数(即不使用dlfeval生成函数)与预期大小的输入。如果任何的代码抛出错误,错误消息可以提供额外的细节。请注意,当您不使用dlfeval函数调用dlgradient函数抛出一个错误。

%生成图像的输入数据。X =兰特((100年28日28日1),“单一”);X = dlarray (X);%生成一个炎热的目标数据进行编码。T = repmat(眼睛(10,“单一”),10 [1]);(损失,梯度)= modelLoss(净,X, T);

手动运行损失模型代码

运行模型损失函数内的代码手动输入生成的预期大小和检查输出和任何错误消息。

例如,考虑以下损失函数模型。

函数(损失,梯度)= modelLoss(净,X, T)%通过dlnetwork转发数据对象。Y =前进(净,X);%计算损失。损失= crossentropy (Y, T);%计算梯度。梯度= dlgradient(损失、net.Learnables);结束

检查模型损失函数通过运行以下代码。

%生成图像的输入数据。X =兰特((100年28日28日1),“单一”);X = dlarray (X);%生成一个炎热的目标数据进行编码。T = repmat(眼睛(10,“单一”),10 [1]);%检查前进传球。Y =前进(净,X);%检查损失计算。损失= crossentropy (Y, T)

相关的话题