主要内容

定义自定义训练循环,损失函数和网络

对于大多数深度学习任务,您可以使用预先训练的网络,并使其适应您自己的数据。有关如何使用迁移学习来重新训练卷积神经网络来对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类.或者,您可以使用从头开始创建和培训网络layerGraph的对象trainNetworktrainingOptions功能。

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

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

有关针对哪个任务使用哪个培训方法的详细信息,请参见在Matlab培训深入学习模型

为自定义训练循环定义深度学习网络

网络定义为dlnetwork对象

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

对于指定为层图的网络,可以创建dlnetwork对象从层图中移除dlnetwork直接函数。

dlnet = dlnetwork(3);

的支持的层列表金宝appdlnetwork对象,看到金宝app支持层部分dlnetwork页面。有关如何使用自定义学习速率计划训练网络的示例,请参见使用自定义训练循环训练网络

将网络定义为模型函数

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

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

如果将自定义网络定义为函数,则模型功能必须支持自动差异化。金宝app您可以使用以下深度学习操作。这里列出的函数仅是一个子集。有关支持的完整功能列表金宝appdlarray输入,看到支持dlarray的函数列表金宝app

函数 描述
avgpool 平均池化操作通过将输入划分为池化区域并计算每个区域的平均值来执行向下采样。
Batchnorm. 批量归一化操作独立地将每个通道的所有观测到的输入数据正常化。加快卷积神经网络的培训,降低网络初始化的敏感性,在卷积和非线性操作之间使用批量归一化,例如线性整流函数(Rectified Linear Unit)
crossentropy 交叉熵运算计算单标签和多标签分类任务中网络预测与目标值之间的交叉熵损失。
crosschannelnorm 跨通道归一化操作使用不同通道中的本地响应对每个激活进行归一化。跨通道标准化通常遵循线性整流函数(Rectified Linear Unit)操作。跨通道标准化也称为局部响应标准化。
CTC. CTC操作计算未对齐序列之间的连接时序分类(CTC)损失。
dlconv 卷积运算将滑动滤波器应用于输入数据。使用dlconv深度学习卷积,分组卷积和渠道可分离卷积的功能。
dltranspconv 转置卷积操作上采样特征映射。
嵌入 嵌入操作将数字索引转换为数字向量,其中索引对应于离散数据。使用嵌入将离散数据(如分类值或单词)映射到数字向量。
fullyconnect 完全连接操作将输入乘以权重矩阵,然后添加偏置向量。
groupnorm 组归一化操作独立地将每个观察分组的频道子集中的输入数据正常化。加快卷积神经网络的培训,降低网络初始化的敏感性,在卷积和非线性操作之间使用群标准化,如线性整流函数(Rectified Linear Unit)
格勒乌 门控循环单元(GRU)操作允许网络学习时间序列和序列数据中时间步骤之间的依赖关系。
休伯 HUBER操作计算回归任务的网络预测和目标值之间的HUBER丢失。当。。。的时候“TransitionPoint”选项为1,这也称为光滑的L.1损失
instancenorm 实例归一化操作独立地将每个通道的输入数据归一化。为了提高卷积神经网络训练的收敛性,降低网络超参数的敏感性,在卷积和非线性操作之间使用实例归一化,例如线性整流函数(Rectified Linear Unit)
翻盖 层归一化操作将每个观测的所有通道的输入数据独立地归一化。为了加快递归式多层感知器神经网络的训练,降低对网络初始化的敏感性,可以在LSTM等可学习操作和全连接操作之后进行层归一化。
leakyrelu. 泄漏的整流线性单元(Relu)激活操作执行非线性阈值操作,其中任何输入值小于零乘以固定比例因子。
LSTM. 长短期记忆(LSTM)操作允许网络学习时间序列的时间步骤和序列数据之间的长期依赖关系。
maxpool 最大池化操作通过将输入划分为池化区域并计算每个区域的最大值来执行向下采样。
maxunpool 最大非池操作通过上采样和零填充将最大池操作的输出解除池。
均方误差 半均方误差运算计算回归任务中网络预测和目标值之间的半均方误差损失。
onehotdecode

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

输入一种可以是一个dlarray.如果一种时,函数忽略数据格式。

线性整流函数(Rectified Linear Unit) 整流线性单元(ReLU)激活操作执行非线性阈值操作,其中任何小于零的输入值都被设为零。
乙状结肠 sigmoid激活操作将sigmoid函数应用于输入数据。
softmax. SoftMax激活操作将SoftMax函数应用于输入数据的通道维度。

指定的损失函数

当您使用自定义训练循环时,必须计算模型渐变功能中的损失。计算渐变时使用损耗值以更新网络权重。要计算丢失,可以使用以下功能。

函数 描述
softmax. SoftMax激活操作将SoftMax函数应用于输入数据的通道维度。
乙状结肠 sigmoid激活操作将sigmoid函数应用于输入数据。
crossentropy 交叉熵运算计算单标签和多标签分类任务中网络预测与目标值之间的交叉熵损失。
休伯 HUBER操作计算回归任务的网络预测和目标值之间的HUBER丢失。当。。。的时候“TransitionPoint”选项为1,这也称为光滑的L.1损失
均方误差 半均方误差运算计算回归任务中网络预测和目标值之间的半均方误差损失。
CTC. CTC操作计算未对齐序列之间的连接时序分类(CTC)损失。

或者,您可以通过创建表单的函数来使用自定义丢失功能损失= myloss(y,t),在那里yT.分别对应网络预测和目标,和损失是返回的损失。

有关如何训练生成式对抗网络(GAN)的示例,请参见使用自定义损失函数生成图像火车生成对抗网络(GaN)

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

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

定义模型梯度函数

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

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

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

更新可知参数

使用自动微分来评估模型梯度,使用dlfeval.函数,该函数在启用自动区分的情况下对函数进行计算。的第一个输入dlfeval.,通过指定为函数句柄指定的模型渐变函数。对于以下输入,请传递模型渐变功能的所需变量。对于输出的输出dlfeval.函数,指定与模型渐变功能相同的输出。

要使用渐变更新可学习参数,可以使用以下函数。

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

也可以看看

|||

相关的话题