定义自定义培训循环,丢失功能和网络

对于大多数深度学习任务,您可以使用备用网络并将其调整到您自己的数据。出于一个示例,展示了如何使用传输学习培育卷积神经网络以对新一组图像进行分类,请参阅培训深度学习网络以分类新图像.或者,您可以使用从头开始创建和培训网络layerGraph的对象Trainnetwork.trainingOptions功能。

如果是trainingOptions功能不提供您需要的培训选项,然后您可以使用自动差异创建自定义训练循环。要了解更多信息,请参阅定义定制培训循环的深度学习网络

如果Deep Searning Toolbox™未提供您的任务所需的图层(包括指定丢失函数的输出层),则可以创建自定义图层。要了解更多信息,请参阅定义自定义深度学习层.对于无法使用输出层指定的损耗函数,您可以在自定义训练循环中指定丢失。要了解更多信息,请参阅指定丢失功能.对于无法使用图层图创建的网络,您可以将自定义网络定义为函数。要了解更多信息,请参阅将网络定义为模型函数

有关用于哪种培训方法的更多信息,请参阅哪种培训方法在Matlab中培训深层学习模型

定义定制培训循环的深度学习网络

网络定义为dlnetwork.目的

有关大多数任务,您可以使用该任务来控制培训算法详细信息trainingOptionsTrainnetwork.功能。如果是trainingOptions功能不提供您需要的任务所需的选项(例如,自定义学习速度计划),那么您可以使用a定义自己的自定义训练循环dlnetwork.目的。一种dlnetwork.对象允许您使用自动区分来训练指定为层图的网络。

对于指定为层图的网络,可以创建dlnetwork.通过使用图层图的对象dlnetwork.直接函数。对于由此支持的层次列表万博1manbetxdlnetwork.对象,看到万博1manbetx支持的层数部分dlnetwork.页。

dlnet = dlnetwork(3);

有关如何使用自定义学习速率计划训练网络的示例,请参见使用自定义培训循环列车网络

将网络定义为模型函数

对于无法使用图层图创建的架构(例如,需要共享权重的暹罗网络),您可以将模型定义为表单的函数[dly1,...,dlym] =模型(参数,dlx1,...,dlxn), 在哪里参数包含网络参数,dlx1,...,dlxn对应于输入数据N.模型的输入,dly1,...,dlym对应于m模型输出。要培训定义为函数的深度学习模型,请使用自定义培训循环。例如,看到使用模型函数的列车网络

将深度学习模型定义为函数时,必须手动初始化图层权重。有关更多信息,请参阅初始化模型函数的可读参数

如果将自定义网络定义为函数,则模型功能必须支持自动差异化。万博1manbetx您可以使用以下深度学习操作。这里列出的函数仅是一个子集。有关支持的完整功能列表万博1manbetxdlarray.输入,参见Dlarray支持的函数列表万博1manbetx

函数 描述
avgpool. 平均池操作通过将输入划分为池区和计算每个区域的平均值来执行下采样。
Batchnorm. 批量归一化操作在迷你批处理上标准化每个输入通道。为了加快卷积神经网络的培训,降低网络初始化的敏感性,在卷积和非线性操作之间使用批量标准化,如
基于分子 交叉熵运算计算单标签和多标签分类任务中网络预测与目标值之间的交叉熵损失。
Crosschannelnorm. 跨通道归一化操作在不同信道中使用本地响应来归一化每个激活。交叉通道归一化通常遵循a操作。跨通道标准化也称为局部响应标准化。
DLCONV. 卷积操作将滑动滤波器应用于输入数据。使用1-D和2-D滤波器具有未分组或分组的卷积和具有未分组卷积的3-D滤波器。
dltranspconv 转置卷积操作Upsamples特征图。
嵌入 嵌入操作将数字索引转换为数字向量,其中索引对应于离散数据。使用嵌入将离散数据(如分类值或单词)映射到数字向量。
全协商 完全连接操作将输入乘以权重矩阵,然后添加偏置向量。
Groupnorm. 组归一化操作将输入数据的通道划分为组,并将激活的激活标准化。加快卷积神经网络的培训,降低网络初始化的敏感性,在卷积和非线性操作之间使用群标准化,如.您可以通过设置适当的组执行实例归一化和图层归一化。
gru. 门控复发单元(GRU)操作允许网络在时间序列和序列数据中的时间步骤之间学习依赖性。
leakyrelu. 泄漏的整流线性单元(Relu)激活操作执行非线性阈值操作,其中任何输入值小于零乘以固定比例因子。
LSTM. 长短期记忆(LSTM)操作允许网络学习时间序列的时间步骤和序列数据之间的长期依赖关系。
maxpool 最大池操作通过将输入划分为池塘区域并计算每个区域的最大值来执行下采样。
maxunpool 最大的未脱井操作通过使用零采样和填充填充,UnoTups无法通过ups采样和填充。
MSE 半均方误差运算计算回归任务中网络预测和目标值之间的半均方误差损失。
整流的线性单元(Relu)激活操作执行非线性阈值操作,其中任何小于零的输入值被设置为零。
onehotdecode.

一次性解码操作将概率向量(如分类网络的输出)解码成分类标签。

输入一种可以是A.dlarray..如果一种格式化,该函数忽略了数据格式。

sigmoid. SIGMOID激活操作将SIGMOID函数应用于输入数据。
softmax. SoftMax激活操作将SoftMax函数应用于输入数据的通道维度。

指定丢失功能

当使用自定义训练循环时,必须计算模型梯度函数中的损失。计算梯度时,使用loss值更新网络权值。在计算损失时,可以使用以下功能:

函数 描述
softmax. SoftMax激活操作将SoftMax函数应用于输入数据的通道维度。
sigmoid. SIGMOID激活操作将SIGMOID函数应用于输入数据。
基于分子 交叉熵运算计算单标签和多标签分类任务中网络预测与目标值之间的交叉熵损失。
MSE 半均方误差运算计算回归任务中网络预测和目标值之间的半均方误差损失。

或者,您可以通过创建表单的函数来使用自定义丢失功能损失= myloss(y,t), 在哪里y是网络预测,T.是目标,还是损失是退回的损失。

有关使用自定义丢失函数来训练生成图像的生成对抗网络(GaN)的示例,请参阅火车生成对抗网络(GaN)

使用自动微分更新可学习参数

当使用自定义训练循环训练深度学习模型时,该软件将可学习参数的损失最小化。为了最小化损失,该软件使用损失相对于可学习参数的梯度。要使用自动区分来计算这些梯度,必须定义一个模型梯度函数。

定义模型梯度函数

对于指定为a的模型dlnetwork.对象,创建表单的函数梯度= Maposgradients(DLNET,DLX,T), 在哪里dlnet是网络,DLX.包含输入预测器,T.包含目标和梯度包含返回的渐变。可选地,您可以将额外的参数传递给梯度函数(例如,如果丢失函数需要额外信息),或返回额外的参数(例如,绘制培训进度的指标)。

对于指定为函数的模型,请创建表单的函数梯度= MapeStrients(参数,DLX,T), 在哪里参数包含可知参数,DLX.包含输入预测器,T.包含目标和梯度包含返回的渐变。可选地,您可以将额外的参数传递给梯度函数(例如,如果丢失函数需要额外信息),或返回额外的参数(例如,绘制培训进度的指标)。

要了解有关定义定制培训循环的模型渐变功能的更多信息,请参阅定义Model梯度函数以进行自定义训练循环

更新可知参数

要使用自动分化评估模型梯度,请使用dlfeval.使用启用自动差异化的函数的函数。对于第一个输入dlfeval.,通过指定为函数句柄的模型渐变函数,并为以下输入传递模型渐变功能的所需变量。对于输出的输出dlfeval.函数,指定与模型渐变功能相同的输出。

要使用渐变更新可读参数,可以使用以下功能:

函数 描述
adamupdate 使用Adaptive Sonment估算更新参数(ADAM)
rmspropupdate. 使用root均方平方传播更新参数(RMSPROP)
sgdmupdate. 使用随机梯度下降使用动量(SGDM)更新参数
dlupdate. 使用自定义功能更新参数

也可以看看

|||

相关的话题