自定义训练循环,损失函数和网络
对于大多数深度学习的任务,您可以使用一个pretrained网络和适应您自己的数据。为例展示如何使用转移学习再教育卷积神经网络分类一套新的图片,明白了火车深入学习网络对新图像进行分类。或者,您可以创建和培训网络从头开始使用layerGraph
的对象trainNetwork
和trainingOptions
功能。
如果trainingOptions
功能不提供训练选项,你需要你的任务,你可以创建一个自定义训练循环使用自动分化。欲了解更多,请看为自定义训练循环定义深度学习网络。
如果深入学习工具箱™不提供所需的层任务(包括输出层指定损失函数),然后你可以创建一个自定义层。欲了解更多,请看定义定制的深度学习层。损失函数不能被指定使用一个输出层,您可以指定循环损失一个定制的培训。欲了解更多,请看指定的损失函数。的网络不能使用层创建图表,您可以自定义网络定义为一个函数。欲了解更多,请看定义网络模型的功能。
关于使用哪个训练方法的更多信息的任务,明白了火车深度学习模型在MATLAB。
为自定义训练循环定义深度学习网络
网络定义为dlnetwork
对象
对于大多数任务,您可以控制使用训练算法的细节trainingOptions
和trainNetwork
功能。如果trainingOptions
功能不提供所需的选项你的任务(例如,一个定制的学习速率的时间表),然后你可以定义自己的自定义训练循环使用dlnetwork
对象。一个dlnetwork
对象允许您指定训练一个网络层图使用自动分化。
对于网络指定为一层图,您可以创建一个dlnetwork
通过使用对象的层图dlnetwork
直接函数。
网= dlnetwork (lgraph);
层支持的列表万博1manbetxdlnetwork
对象,看到万博1manbetx支持层部分的dlnetwork
页面。为例展示如何使用自定义训练一个网络学习速率时间表,看看列车网络的使用自定义训练循环。
定义网络模型的功能
无法创建使用层的架构图(例如,暹罗网络需要共享的重量),您可以定义模型的函数形式(日元…,YM] =模型(参数X1,…, XN)
,在那里参数
包含网络参数,X1,…, XN
对应的输入数据N
模型的输入,日元…,
对应于米
模型输出。火车深度学习模型定义为一个函数,使用自定义训练循环。例如,看到的列车网络的使用模型的功能。
当你深入学习模型定义为一个函数,您必须手动初始化层的权重。有关更多信息,请参见初始化函数可学的参数模型。
如果您定义一个自定义的网络功能,然后模型函数必须支持自动分化。万博1manbetx您可以使用以下深度学习操作。这里列出的功能只是一个子集。支持的功能的完整列表万博1manbetxdlarray
输入,看到与dlarray支持函数的列表万博1manbetx。
函数 | 描述 |
---|---|
注意 |
注意操作的重点部分输入使用加权乘法操作。 |
avgpool |
平均池操作执行downsampling除以输入池区域和计算每个区域的平均值。 |
batchnorm |
批处理规范化操作可实现输入数据在所有观测每个通道独立。加快卷积神经网络的训练,减少对网络的初始化,使用批量规范化卷积和非线性等操作线性整流函数(Rectified Linear Unit) 。 |
crossentropy |
叉操作计算网络预测和目标之间的叉损失值单标牌和多标记分类任务。 |
crosschannelnorm |
横跨海峡的规范化操作使用本地响应在不同渠道规范化每个激活。横跨海峡的正常化通常遵循一个线性整流函数(Rectified Linear Unit) 操作。横跨海峡的规范化也被称为当地反应正常化。 |
ctc |
CTC操作计算之间的联结主义颞分类(CTC)损失对齐序列。 |
dlconv |
卷积操作滑动过滤器适用于输入数据。使用dlconv 函数卷积深度学习、分组卷积和channel-wise分离卷积。 |
dlode45 |
神经常微分方程(ODE)操作返回指定的颂歌的解决方案。 |
dltranspconv |
转置卷积操作upsamples特征图。 |
嵌入 |
嵌入操作数字指标转换为数值向量,指标对应于离散数据的地方。使用嵌入的地图离散数据分类值或文字等数值向量。 |
fullyconnect |
完全连接操作增加权重矩阵的输入向量,然后添加一个偏见。 |
gelu |
高斯误差线性单元(GELU)激活操作重量输入高斯分布下的概率。 |
groupnorm |
集团标准化操作可实现输入数据分组为每个独立观测通道的子集。加快卷积神经网络的训练,减少对网络的初始化,使用组规范化卷积和非线性等操作线性整流函数(Rectified Linear Unit) 。 |
格勒乌 |
封闭的复发性单元(格勒乌)操作允许网络学习时间步骤时间序列和序列数据之间的依赖关系。 |
休伯 |
Huber操作计算网络预测和目标之间的Huber损失值回归任务。当“TransitionPoint” 选项1,这也被称为光滑的l1损失。 |
instancenorm |
实例规范化操作可实现输入数据在每个通道独立对每个观察。提高卷积神经网络训练的收敛和减少网络hyperparameters敏感性,使用实例之间的规范化卷积和非线性等操作线性整流函数(Rectified Linear Unit) 。 |
l1loss |
L1操作损失计算L1损失给网络预测和目标值。当减少 选择是“和” 和NormalizationFactor 选择是“批大小” ,计算值称为平均绝对误差(MAE)。 |
l2loss |
L2操作损失计算L2基于平方损失(L2规范)给定网络预测和目标的价值观。当减少 选择是“和” 和NormalizationFactor 选择是“批大小” ,计算值称为均方误差(MSE)。 |
layernorm |
层标准化操作可实现输入数据在所有渠道每个独立观察。加快复发性和多层感知器神经网络训练,减少对网络的初始化,使用层标准化后可学的操作,如LSTM和完全连接操作。 |
leakyrelu |
漏水的解决线性单元(ReLU)激活操作执行非线性阈值操作,任何输入值小于零乘以一个固定的比例因子。 |
lstm |
漫长的短期记忆(LSTM)操作允许网络学习长期时间步骤时间序列和序列数据之间的依赖关系。 |
maxpool |
最大池操作执行downsampling除以输入池区域和计算每个区域的最大价值。 |
maxunpool |
最大unpooling操作由upsampling unpools最大池操作的输出和零填充。 |
均方误差 |
均方误差的一半操作计算均方误差损失一半网络预测和目标之间的值回归任务。 |
onehotdecode |
在一个炎热的解码操作解码概率向量,如分类网络的输出,分类标签。 输入 |
线性整流函数(Rectified Linear Unit) |
修正的线性单元(ReLU)激活操作执行非线性阈值操作,任何输入值小于零设置为零。 |
乙状结肠 |
乙状结肠激活操作乙状结肠函数适用于输入数据。 |
softmax |
将softmax激活操作将softmax函数适用于输入的频道维度数据。 |
指定的损失函数
当你使用一个自定义训练循环,必须计算模型中的损失梯度函数。使用时损失值计算梯度更新网络权重。计算损失,您可以使用以下功能。
函数 | 描述 |
---|---|
softmax |
将softmax激活操作将softmax函数适用于输入的频道维度数据。 |
乙状结肠 |
乙状结肠激活操作乙状结肠函数适用于输入数据。 |
crossentropy |
叉操作计算网络预测和目标之间的叉损失值单标牌和多标记分类任务。 |
l1loss |
L1操作损失计算L1损失给网络预测和目标值。当减少 选择是“和” 和NormalizationFactor 选择是“批大小” ,计算值称为平均绝对误差(MAE)。 |
l2loss |
L2操作损失计算L2基于平方损失(L2规范)给定网络预测和目标的价值观。当减少 选择是“和” 和NormalizationFactor 选择是“批大小” ,计算值称为均方误差(MSE)。 |
休伯 |
Huber操作计算网络预测和目标之间的Huber损失值回归任务。当“TransitionPoint” 选项1,这也被称为光滑的l1损失。 |
均方误差 |
均方误差的一半操作计算均方误差损失一半网络预测和目标之间的值回归任务。 |
ctc |
CTC操作计算之间的联结主义颞分类(CTC)损失对齐序列。 |
或者,您可以使用一个定制的损失函数通过创建的函数形式损失= myLoss (Y, T)
,在那里Y
和T
分别对应于网络预测和目标损失
是返回的损失。
为一个例子,演示如何训练生成对抗网络(GAN)使用一个定制的损失函数,进行图像生成火车生成对抗网络(甘)。
更新可学的参数使用自动分化
当你训练一个深度学习循环模型与一个定制的培训,软件最小化损失对可学的参数。把损失减小到最低限度,软件使用渐变的损失就可学会的参数。计算这些梯度使用自动分化,您必须定义一个模型梯度函数。
定义模型损失函数
指定为一个模型dlnetwork
对象,创建一个函数的形式(损失,梯度)= modelLoss(净,X, T)
,在那里净
是网络,X
是网络的输入,T
包含目标,损失
和梯度
分别返回的损失和梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,更新网络状态)。
指定为一个函数模型,创建一个函数的形式(损失,梯度)= modelLoss(参数X, T)
,在那里参数
包含可学的参数,X
模型的输入,T
包含目标,损失
和梯度
分别返回的损失和梯度。另外,您还可以通过额外的参数梯度函数(例如,如果损失函数需要额外的信息),或返回额外的参数(例如,更新后的模型状态)。
了解更多关于定义模型损失函数自定义训练循环,明白了定义模型损失函数自定义训练循环。
更新可学的参数
评估使用自动分化模型损失函数,使用dlfeval
函数,它启用了自动分化的评价函数。输入的第一dlfeval
,通过模型损失函数指定为一个函数处理。下列输入、传递损失函数所需的变量模型。的输出dlfeval
函数,指定相同的输出作为损失函数模型。
更新使用梯度可学的参数,您可以使用以下功能。
函数 | 描述 |
---|---|
adamupdate |
使用自适应更新参数矩估计(亚当) |
rmspropupdate |
更新参数使用根均方传播(RMSProp) |
sgdmupdate |
更新参数使用随机梯度下降法和动力(个) |
dlupdate |
更新参数使用自定义函数 |
另请参阅
dlarray
|dlgradient
|dlfeval
|dlnetwork