深度学习神经网络的训练选项
返回指定的优化器的训练选项选项
= trainingOptions (solverName
)solverName
.类的输入参数来训练网络trainNetwork
函数。
返回带有由一个或多个名-值对参数指定的附加选项的训练选项。选项
= trainingOptions (solverName
,名称,值
)
创建一组选项,使用随机梯度下降和动量来训练网络。每5个周期将学习率降低0.2倍。将训练的最大epoch数设置为20,并在每次迭代中使用64个观测值的迷你批处理。打开训练进度图。
选项= trainingOptions(“个”,...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”, 0.2,...“LearnRateDropPeriod”5,...“MaxEpochs”, 20岁,...“MiniBatchSize”, 64,...“阴谋”,“训练进步”)
options = TrainingOptionsSGDM with properties: Momentum: 0.9000 InitialLearnRate: 0.0100 LearnRateSchedule: 'piecewise' LearnRateDropFactor: 0.2000 LearnRateDropPeriod: 5 L2Regularization: 1.0000 -04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: " ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: "'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1
当你为深度学习训练网络时,监控训练进度通常是有用的。通过在训练期间绘制各种指标,您可以了解训练是如何进行的。例如,您可以确定网络准确性是否以及有多快在提高,以及网络是否开始过度拟合训练数据。
当你指定“训练进步”
随着“阴谋”
价值trainingOptions
并开始网络培训,trainNetwork
在每次迭代中创建一个图形并显示训练指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions
,然后图中显示了每次的验证指标trainNetwork
验证网络。该图描述如下:
训练精度-每个小批量的分类精度。
平滑训练精度-平滑训练精度,通过对训练精度应用平滑算法得到。它比未平滑的精度噪音更小,更容易发现趋势。
验证准确性-整个验证集的分类精度(指定使用trainingOptions
).
培训损失,平滑训练损失,确认损失- - - - - -分别是每个小批、其平滑版本和验证集上的损失。如果你的网络的最后一层是classificationLayer
,则损失函数为交叉熵损失。有关分类和回归问题的损失函数的更多信息,请参见输出层.
对于回归网络,该图描绘的是均方根误差(RMSE)而不是精度。
这个数字标志着每一次训练时代使用阴影背景。epoch是对整个数据集的完整遍历。
在训练过程中,单击右上角的停止按钮,可以停止训练并返回网络的当前状态。例如,当网络的准确率达到一个平台期,并且很明显准确率不再提高时,您可能想要停止训练。单击停止按钮后,可能需要一段时间才能完成训练。一旦训练完成,trainNetwork
返回经过训练的网络。
训练结束后,查看结果显示最终验证精度和训练结束的原因。最后的验证指标被标记最后在情节中。如果您的网络包含批处理归一化层,则最终验证指标通常与训练期间评估的验证指标不同。这是因为最终网络中的批处理归一化层执行不同于训练期间的操作。
在右侧界面,可查看培训时间和设置信息。要了解有关培训选项的更多信息,请参见参数设置与卷积神经网络训练.
训练过程中的进度
培训网络,并在培训过程中绘制培训进度图。
加载训练数据,其中包含5000张数字图像。留出1000个图像用于网络验证。
[XTrain,YTrain] = digitTrain4DArrayData;idx = randperm(size(XTrain,4),1000);XValidation = XTrain(:,:,:,idx);XTrain(:,:,:,idx) = [];YValidation = YTrain(idx);YTrain(idx) = [];
构造网络对数字图像数据进行分类。
图层= [imageInputLayer([28 28 1])卷积2dlayer (3,8,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”,“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”,“相同”batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
指定网络培训选项。若要在训练期间定期验证网络,请指定验证数据。选择“ValidationFrequency”
值,使网络大约每epoch验证一次。要在培训过程中绘制培训进度,请指定“训练进步”
随着“阴谋”
价值。
选项= trainingOptions(“个”,...“MaxEpochs”8...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”30岁的...“详细”假的,...“阴谋”,“训练进步”);
培训网络。
net = trainNetwork(XTrain,YTrain,图层,选项);
solverName
- - - - - -训练网络求解器“个”
|“rmsprop”
|“亚当”
用于训练网络的求解器,指定为下列之一:
“个”
-使用随机梯度下降与动量(SGDM)优化器。方法指定动量值“动量”
名称-值对参数。
“rmsprop”
-使用RMSProp优化器。函数指定梯度移动平均平方的衰减率“SquaredGradientDecayFactor”
名称-值对参数。
“亚当”
-使用Adam优化器。函数指定梯度移动平均和平方梯度移动平均的衰减率“GradientDecayFactor”
而且“SquaredGradientDecayFactor”
名称-值对参数。
有关不同求解器的更多信息,请参见随机梯度下降.
的可选逗号分隔对名称,值
参数。名字
参数名称和价值
对应的值。名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“InitialLearnRate”,0.03,“L2Regularization”,0.0005,“LearnRateSchedule”、“分段”
指定初始学习率为0.03l2
正则化因子为0.0005,并指示软件通过乘以某个因子来降低每给定周期数的学习率。
“阴谋”
- - - - - -网络训练时显示的图“没有”
(默认)|“训练进步”
在网络训练期间显示的图,指定为逗号分隔的对,由“阴谋”
和以下其中之一:
“没有”
—训练过程中严禁展示情节。
“训练进步”
-情节训练进度。该图显示了小批损失和准确性,验证损失和准确性,以及关于训练进度的附加信息。该情节有一个停止按钮在右上角。点击按钮停止训练,返回网络当前状态。有关训练进度图的更多信息,请参见监控深度学习训练进度.
例子:“阴谋”,“训练进步”
“详细”
- - - - - -显示培训进度信息的指示器1
(真正的
)(默认)|0
(假
)指示器,用于在命令窗口中显示培训进度信息,指定为由逗号分隔的对组成“详细”
,要么1
(真正的
)或0
(假
).
详细输出显示如下信息:
网络的分类
场 | 描述 |
---|---|
时代 |
时代的数字。epoch对应于数据的完整传递。 |
迭代 |
迭代数。迭代对应于一个小批处理。 |
时间 |
时间以小时、分钟和秒为单位流逝。 |
Mini-batch准确性 |
小批量分类的准确性。 |
验证准确性 |
验证数据的分类精度。如果不指定验证数据,则函数不会显示此字段。 |
Mini-batch损失 |
小批上的损失。如果输出层是aClassificationOutputLayer 对象,则对于互斥类的多类分类问题,损失为交叉熵损失。 |
确认损失 |
验证数据的损失。如果输出层是aClassificationOutputLayer 对象,则对于互斥类的多类分类问题,损失为交叉熵损失。如果不指定验证数据,则函数不会显示此字段。 |
基础学习率 |
基础学习率。软件将各层的学习速率因子乘以这个值。 |
回归网络
场 | 描述 |
---|---|
时代 |
时代的数字。epoch对应于数据的完整传递。 |
迭代 |
迭代数。迭代对应于一个小批处理。 |
时间 |
时间以小时、分钟和秒为单位流逝。 |
Mini-batch RMSE |
小批上的均方根误差(RMSE)。 |
验证RMSE |
验证数据上的RMSE。如果不指定验证数据,则软件不会显示此字段。 |
Mini-batch损失 |
小批上的损失。如果输出层是aRegressionOutputLayer 对象,则损失为半均方误差。 |
确认损失 |
验证数据的损失。如果输出层是aRegressionOutputLayer 对象,则损失为半均方误差。如果不指定验证数据,则软件不会显示此字段。 |
基础学习率 |
基础学习率。软件将各层的学习速率因子乘以这个值。 |
要指定验证数据,请使用“ValidationData”
名称-值对。
例子:“详细”,假的
“VerboseFrequency”
- - - - - -详细打印的频率详细打印的频率,即打印到命令窗口之间的迭代次数,指定为由逗号分隔的对组成“VerboseFrequency”
一个正整数。此选项仅在“详细”
值=真正的
.
如果你在训练期间验证了网络,那么trainNetwork
还在每次验证发生时打印到命令窗口。
例子:“VerboseFrequency”,100年
“MaxEpochs”
- - - - - -最大epoch数用于训练的最大epoch数,指定为逗号分隔的对,由“MaxEpochs”
一个正整数。
迭代是梯度下降算法中使用小批最小化损失函数的一个步骤。epoch是训练算法在整个训练集上的完整传递。
例子:“MaxEpochs”,20
“MiniBatchSize”
- - - - - -小批尺寸用于每个训练迭代的小批的大小,指定为逗号分隔的对,由“MiniBatchSize”
一个正整数。迷你批处理是训练集的子集,用于评估损失函数的梯度并更新权重。看到随机梯度下降.
例子:“MiniBatchSize”,256年
“洗牌”
- - - - - -数据变换选项“一次”
(默认)|“永远”
|“every-epoch”
选项,指定为逗号分隔的对,由“洗牌”
和以下其中之一:
“一次”
-在培训前对培训和验证数据进行一次洗牌。
“永远”
—禁止数据shuffle。
“every-epoch”
-在每个训练纪元之前洗牌训练数据,在每个网络验证之前洗牌验证数据。如果小批量大小没有平均分配训练样本的数量,则trainNetwork
丢弃不适合每个epoch的最后完整小批的训练数据。为避免在每个纪元丢弃相同的数据,请设置“洗牌”
价值“every-epoch”
.
例子:“洗牌”,“every-epoch”
“ValidationData”
- - - - - -培训期间用于验证的数据训练期间用于验证的数据,指定为图像数据存储、数据存储、表或单元格数组。验证数据的格式取决于任务的类型,并对应于有效的输入trainNetwork
函数。
将验证数据指定为以下之一:
在培训期间,trainNetwork
计算验证数据的验证精度和验证损失。要指定验证频率,请使用“ValidationFrequency”
名称-值对参数。您还可以使用验证数据在验证损失停止减少时自动停止训练。若要启用自动验证停止,请使用“ValidationPatience”
名称-值对参数。
如果你的网络在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证精度可以高于训练(小批量)精度。
验证数据根据“洗牌”
价值。如果“洗牌”
值=“every-epoch”
,然后在每次网络验证之前对验证数据进行洗牌。
“ValidationFrequency”
- - - - - -网络验证频率迭代次数中的网络验证频率,指定为由逗号分隔的对组成“ValidationFrequency”
一个正整数。
的“ValidationFrequency”
值是验证指标评估之间的迭代次数。要指定验证数据,请使用“ValidationData”
名称-值对参数。
例子:“ValidationFrequency”,20
“ValidationPatience”
- - - - - -停止验证的耐心正
(默认)|正整数验证停止网络训练的耐心,指定为逗号分隔的对,由“ValidationPatience”
一个正整数或者正
.
的“ValidationPatience”
Value是在网络训练停止之前,验证集上的损失可以大于或等于之前最小损失的次数。若要启用自动验证停止,请指定一个正整数作为“ValidationPatience”
价值。的默认值正
,则训练在最大epoch数后停止。要指定验证数据,请使用“ValidationData”
名称-值对参数。
例子:“ValidationPatience”,5
“InitialLearnRate”
- - - - - -初始学习率用于训练的初始学习率,指定为逗号分隔的对,由“InitialLearnRate”
一个正标量。的缺省值为0.01“个”
解算器和0.001“rmsprop”
而且“亚当”
解决者。如果学习率太低,那么训练就需要很长时间。如果学习率太高,那么训练可能会达到次优结果或发散。
例子:“InitialLearnRate”,0.03
数据类型:单
|双
“LearnRateSchedule”
- - - - - -在训练期间降低学习率的选项“没有”
(默认)|“分段”
选项,用于在训练期间降低学习率,指定为逗号分隔的对,由“LearnRateSchedule”
和以下其中之一:
“没有”
-在整个训练过程中,学习率保持不变。
“分段”
-软件更新学习率每一定数量的epoch乘以一定的因素。使用LearnRateDropFactor
名称-值对参数指定此因子的值。使用LearnRateDropPeriod
名称-值对参数指定乘法之间的epoch数。
例子:“LearnRateSchedule”、“分段”
“LearnRateDropPeriod”
- - - - - -降低学习率的epoch数删除学习率的epoch数,指定为逗号分隔的对,由“LearnRateDropPeriod”
一个正整数。的值时,此选项才有效LearnRateSchedule
是“分段”
.
该软件将全局学习率与drop因子相乘,每次指定的epoch数通过。属性指定删除因子LearnRateDropFactor
名称-值对参数。
例子:“LearnRateDropPeriod”,3
“LearnRateDropFactor”
- - - - - -降低学习率的因素用于降低学习率的因子,指定为逗号分隔的对,由“LearnRateDropFactor”
一个从0到1的标量。的值时,此选项才有效LearnRateSchedule
是“分段”
.
LearnRateDropFactor
是一个乘法因子,适用于每次经过一定数量的epoch时的学习率。属性指定epoch的个数LearnRateDropPeriod
名称-值对参数。
例子:“LearnRateDropFactor”,0.1
数据类型:单
|双
“L2Regularization”
- - - - - -L的因子2正则化L的因子2正则化(权重衰减),指定为逗号分隔的对,由“L2Regularization”
一个非负标量。有关更多信息,请参见L2正规化.
您可以为L指定一个乘数2具有可学习参数的网络层的正则化。有关更多信息,请参见在卷积层和全连接层中设置参数.
例子:“L2Regularization”,0.0005
数据类型:单
|双
“动量”
- - - - - -上一步贡献上一迭代的参数更新步骤对当前具有动量的随机梯度下降迭代的贡献,指定为由逗号分隔的对组成“动量”
一个从0到1的标量。值为0表示上一步没有贡献,而值为1表示上一步贡献最大。
要指定“动量”
值,必须设置solverName
是“个”
.默认值适用于大多数问题。有关不同求解器的更多信息,请参见随机梯度下降.
例子:“动量”,0.95
数据类型:单
|双
“GradientDecayFactor”
- - - - - -梯度移动平均衰减率亚当解算器的梯度移动平均衰减率,指定为逗号分隔的对,由“GradientDecayFactor”
一个小于1的非负标量。梯度衰减率表示为β1
在[4].
要指定“GradientDecayFactor”
值,必须设置solverName
是“亚当”
.默认值适用于大多数问题。有关不同求解器的更多信息,请参见随机梯度下降.
例子:“GradientDecayFactor”,0.95
数据类型:单
|双
“SquaredGradientDecayFactor”
- - - - - -平方梯度移动平均衰减率Adam和RMSProp求解器的平方梯度移动平均的衰减率,指定为逗号分隔的对,由“SquaredGradientDecayFactor”
一个小于1的非负标量。梯度衰减率的平方表示为β2
在[4].
要指定“SquaredGradientDecayFactor”
值,必须设置solverName
是“亚当”
或“rmsprop”
.衰减率的典型值为0.9、0.99和0.999,分别对应于10、100和1000个参数更新的平均长度。Adam求解器的默认值是0.999。RMSProp求解器的默认值是0.9。
有关不同求解器的更多信息,请参见随机梯度下降.
例子:“SquaredGradientDecayFactor”,0.99
数据类型:单
|双
‘ε’
- - - - - -分母抵消Adam和RMSProp求解器的分母偏移量,指定为逗号分隔的对,由‘ε’
一个正标量。求解器将偏移量添加到网络参数更新中的分母上,以避免除零。
要指定‘ε’
值,必须设置solverName
是“亚当”
或“rmsprop”
.默认值适用于大多数问题。有关不同求解器的更多信息,请参见随机梯度下降.
例子:‘ε’,1 e-6
数据类型:单
|双
“ResetInputNormalization”
- - - - - -选项重置输入层归一化真正的
(默认)|假
重置输入层规范化的选项,指定为以下之一:
真正的
-重置输入层归一化统计数据,并在训练时重新计算。
假
-当训练时间统计数据为空时,计算归一化统计数据。
“GradientThreshold”
- - - - - -梯度阈值正
(默认)|积极的标量梯度阈值,指定为由逗号分隔的对组成“GradientThreshold”
而且正
或者一个正标量。的值GradientThreshold
,则根据剪切梯度GradientThresholdMethod
.
例子:“GradientThreshold”6
“GradientThresholdMethod”
- - - - - -梯度阈值法“l2norm”
(默认)|“global-l2norm”
|“绝对值”
梯度阈值方法用于剪辑超过梯度阈值的梯度值,指定为由逗号分隔的对组成“GradientThresholdMethod”
和以下其中之一:
“l2norm”
-如果L2可学习参数的梯度范数大于GradientThreshold
,然后缩放梯度,使L2规范=GradientThreshold
.
“global-l2norm”
—如果全局L2规范,l,大于GradientThreshold
,然后将所有梯度按倍缩放GradientThreshold /
l.全局L2Norm考虑所有可学习参数。
“绝对值”
-如果一个可学习参数的梯度中个别偏导数的绝对值大于GradientThreshold
,然后将偏导数缩放为GradientThreshold
保留偏导数的符号。
有关更多信息,请参见梯度剪裁.
例子:“GradientThresholdMethod”、“global-l2norm”
“SequenceLength”
- - - - - -选项填充,截断,或分割输入序列“最长”
(默认)|“最短”
|正整数填充、截断或分割输入序列的选项,指定为下列之一:
“最长”
-每个小批中的衬垫序列与最长序列具有相同的长度。这个选项不会丢弃任何数据,尽管填充会给网络带来噪声。
“最短”
-截断每个小批中的序列,使其长度与最短序列相同。此选项确保不添加填充,但要以丢弃数据为代价。
正整数-对于每个迷你批,将序列填充到指定长度的最近倍数,该倍数大于迷你批中最长的序列长度,然后将序列分割为指定长度的更小序列。如果发生分裂,那么软件将创建额外的小批。如果完整序列不适合内存,请使用此选项。或者,尝试通过设置。来减少每个小批的序列数“MiniBatchSize”
选择较低的值。
有关填充、截断和分隔输入序列的效果的详细信息,请参见序列填充,截断和分割.
例子:“SequenceLength”、“最短的
“SequencePaddingDirection”
- - - - - -填充或截断的方向“对”
(默认)|“左”
填充或截断方向,指定为下列之一:
“对”
-填充或截断右边的序列。序列在同一时间步开始,软件截断或增加填充序列的结束。
“左”
-填充或截断左边的序列。该软件截断或添加填充到序列的开始,以便序列在同一时间步结束。
由于LSTM层处理序列数据一次一步,当层OutputMode
属性是“最后一次”
,最后时间步长的任何填充都会对层输出产生负面影响。若要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”
选项“左”
.
对于序列对序列网络(当OutputMode
属性是“序列”
对于每个LSTM层),第一时间步中的任何填充都会对早期时间步的预测产生负面影响。若要在右侧填充或截断序列数据,请设置“SequencePaddingDirection”
选项“对”
.
有关填充、截断和分隔输入序列的效果的详细信息,请参见序列填充,截断和分割.
“SequencePaddingValue”
- - - - - -值来填充输入序列用于填充输入序列的值,指定为标量。该选项仅当SequenceLength
是“最长”
或者一个正整数。不垫序列用南
,因为这样做会在整个网络中传播错误。
例子:“SequencePaddingValue”,1
“ExecutionEnvironment”
- - - - - -培训网络硬件资源“汽车”
(默认)|“cpu”
|“图形”
|“multi-gpu”
|“平行”
用于培训网络的硬件资源,指定为下列之一:
“汽车”
—如果有图形处理器,请使用图形处理器。否则请使用CPU。
“cpu”
—使用CPU。
“图形”
—使用GPU。
“multi-gpu”
—在一台机器上使用多个gpu,使用基于默认集群配置文件的本地并行池。如果当前没有并行池,软件将启动一个大小等于可用gpu数量的并行池。
“平行”
—根据默认集群配置文件,使用本地或远端并行池。如果当前没有并行池,软件将使用默认集群配置文件启动一个并行池。如果池可以访问GPU,那么只有具有唯一GPU的工作者才能执行训练计算。如果池中没有gpu,则对所有可用的CPU worker进行培训。
有关何时使用不同执行环境的详细信息,请参见并行和云中扩展深度学习.
GPU,多GPU和并行选项需要并行计算工具箱™。要使用GPU进行深度学习,你还必须有一个CUDA®使英伟达®GPU具有3.0或更高的计算能力。如果您选择了这些选项之一,而并行计算工具箱或合适的GPU不可用,则软件将返回一个错误。
要想在并行训练时看到性能的改善,请尝试扩大训练的规模MiniBatchSize
而且InitialLearnRate
训练选项的gpu数量。
训练长短期记忆网络只支持单CPU或单GPU训练。万博1manbetx
用于多gpu训练或并行训练的数据存储必须是可分区的。有关更多信息,请参见使用数据存储进行并行训练和后台调度.
如果你使用“multi-gpu”
选项的可分区输入数据存储“DispatchInBackground”
选项,然后软件启动一个大小等于默认池大小的并行池。具有独特gpu的工作人员执行训练计算。剩余的工作人员用于后台调度。
例子:“ExecutionEnvironment”、“cpu的
“WorkerLoad”
- - - - - -并联工人负荷分配gpu或cpu之间的并行工作负载分配,指定为由逗号分隔的对组成“WorkerLoad”
和以下其中之一:
从0到1的标量-每台机器上用于网络训练计算的工人的百分比。如果您使用启用后台调度的迷你批数据存储中的数据训练网络,那么其余的worker将在后台获取和预处理数据。
正整数-每台机器上用于网络训练计算的工人数。如果您使用启用后台调度的迷你批数据存储中的数据训练网络,那么其余的worker将在后台获取和预处理数据。
数字矢量-网络对并行池中每个工作人员的训练负荷。对于一个向量W
、工人我
得到一个分数W(我)/ (W)和
工作的数量(每小批样品的数量)。如果您使用启用后台调度的迷你批处理数据存储中的数据来训练网络,那么您可以分配一个0的工作者负载来使用该工作者在后台获取数据。指定的向量必须包含并行池中的每个worker的一个值。
如果并行池可以访问GPU,那么没有唯一GPU的工作线程永远不会用于训练计算。具有GPU的池的默认设置是使用所有具有唯一GPU的worker进行训练计算,其余worker用于后台调度。如果该池不能访问gpu,并且cpu用于培训,那么默认是每台机器使用一个worker进行后台数据调度。
“DispatchInBackground”
- - - - - -使用后台调度假
(默认)|真正的
使用后台调度(异步预取队列)从指定为的数据存储中读取训练数据假
或真正的
.后台调度需要并行计算工具箱。
DispatchInBackground
仅支持可分区的数万博1manbetx据存储。有关更多信息,请参见使用数据存储进行并行训练和后台调度.
“CheckpointPath”
- - - - - -检查点网络保存路径”
(默认)|特征向量检查点网络的保存路径,由逗号分隔的对组成“CheckpointPath”
和一个字符向量。
如果没有指定路径(即,使用默认路径)”
),则该软件不会保存任何检查点网络。
如果指定路径,则trainNetwork
在每个纪元之后将检查点网络保存到此路径,并为每个网络分配唯一名称。然后,您可以加载任何检查点网络,并从该网络恢复训练。
如果该文件夹不存在,则必须先创建它,然后再指定保存检查点网络的路径。如果指定的路径不存在,则trainingOptions
返回一个错误。
有关保存网络检查点的详细信息,请参见保存检查点网络并恢复培训.
例子:“CheckpointPath”、“C: \ Temp \检查点”
数据类型:字符
“OutputFcn”
- - - - - -输出函数在训练期间调用的输出函数,指定为逗号分隔的对,由“OutputFcn”
和函数句柄或函数句柄的单元格数组。trainNetwork
在训练开始前、每次迭代之后和训练结束后调用指定的函数一次。trainNetwork
传递一个包含以下字段信息的结构:
场 | 描述 |
---|---|
时代 |
当前纪元数 |
迭代 |
当前迭代次数 |
TimeSinceStart |
时间单位为秒,从训练开始算起 |
TrainingLoss |
电流小批损耗 |
ValidationLoss |
验证数据的损失 |
BaseLearnRate |
当前基本学习率 |
TrainingAccuracy |
当前小批的准确性(分类网络) |
TrainingRMSE |
当前小批上的RMSE(回归网络) |
ValidationAccuracy |
验证数据的准确性(分类网络) |
ValidationRMSE |
验证数据的RMSE(回归网络) |
状态 |
当前训练状态,可能值为“开始” ,“迭代” ,或“完成” |
如果一个字段不是计算出来的,或者与输出函数的某个调用无关,那么该字段包含一个空数组。
您可以使用输出函数来显示或绘制进度信息,或者停止训练。为了尽早停止训练,让输出函数返回真正的
.如果任何输出函数返回真正的
,然后训练结束trainNetwork
返回最新的网络。有关显示如何使用输出函数的示例,请参见深度学习网络训练中的自定义输出.
数据类型:function_handle
|细胞
选项
-培训选择TrainingOptionsSGDM
|TrainingOptionsRMSProp
|TrainingOptionsADAM
培训选项,返回为TrainingOptionsSGDM
,TrainingOptionsRMSProp
,或TrainingOptionsADAM
对象。训练神经网络时,使用训练选项作为参数的输入trainNetwork
函数。
如果solverName
=“个”
,“rmsprop”
,或“亚当”
,则训练选项返回为TrainingOptionsSGDM
,TrainingOptionsRMSProp
,或TrainingOptionsADAM
对象,分别。
的培训选项属性TrainingOptionsSGDM
,TrainingOptionsADAM
,TrainingOptionsRMSProp
直接对象。方法后更改小批处理大小trainingOptions
函数时,可以编辑MiniBatchSize
房地产直接:
options = trainingOptions('sgdm');选项。MiniBatchSize = 64;
对于大多数深度学习任务,你可以使用预先训练好的网络,并使其适应你自己的数据。有关演示如何使用迁移学习重新训练卷积神经网络来对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类.或者,您可以从头创建和训练网络layerGraph
对象具有trainNetwork
而且trainingOptions
功能。
如果trainingOptions
函数没有为您的任务提供所需的训练选项,那么您可以使用自动区分创建自定义训练循环。要了解更多信息,请参见为自定义训练循环定义深度学习网络.
对于卷积层和全连接层,权重和偏差的初始化由WeightsInitializer
而且BiasInitializer
层的属性,分别。有关显示如何更改权重和偏差的初始化的示例,请参见在卷积层中指定初始权值和偏差而且在全连接层中指定初始权值和偏差.
标准梯度下降算法更新网络参数(权重和偏差),通过在每次迭代中沿损失负梯度的方向采取小步骤来最小化损失函数,
在哪里 是迭代数, 是学习率, 参数是向量,和 是损失函数。在标准梯度下降算法中,损失函数的梯度, ,使用整个训练集进行评估,而标准梯度下降算法一次使用整个数据集。
相比之下,在每次迭代中随机梯度下降算法计算梯度和更新参数使用子集的训练数据。在每次迭代中使用一个不同的子集,称为迷你批处理。使用小批量的训练算法对整个训练集的完整传递是1时代.随机梯度下降之所以是随机的,是因为使用小批量计算的参数更新是使用完整数据集产生的参数更新的噪声估计。属性可以指定小批处理大小和最大epoch数“MiniBatchSize”
而且“MaxEpochs”
名称-值对参数。
随机梯度下降算法可以沿着最陡下降的路径振荡到最优。在参数更新中添加动量项是减少这种振荡的一种方法[2].随机动量梯度下降(SGDM)更新为
在哪里
确定前一个梯度步骤对当前迭代的贡献。属性指定此值“动量”
名称-值对参数。要训练神经网络使用随机梯度下降与动量算法,指定solverName
作为“个”
.要指定学习率α的初始值,请使用“InitialLearnRate”
名称-值对参数。您还可以为不同的层和参数指定不同的学习率。有关更多信息,请参见在卷积层和全连接层中设置参数.
有动量的随机梯度下降对所有参数使用单一的学习率。其他优化算法试图通过使用随参数不同的学习率来改进网络训练,并且可以自动适应正在优化的损失函数。RMSProp(均方根传播)就是这样一种算法。它保持参数梯度的逐元素平方的移动平均值,
β2是移动平均线的衰减率。衰减率的常见值为0.9、0.99和0.999。相应的梯度平方的平均长度相等1 /(1 -β2),即参数更新次数分别为10次、100次和1000次。你可以指定β2通过使用“SquaredGradientDecayFactor”
名称-值对参数。RMSProp算法使用这个移动平均来单独规范化每个参数的更新,
其中按元素执行除法。使用RMSProp可以有效地降低梯度大的参数的学习率,提高梯度小的参数的学习率。ɛ为避免除零而加的一个小常数。你可以指定ɛ通过使用‘ε’
参数,但通常使用默认值即可。使用RMSProp训练神经网络,指定solverName
作为“rmsprop”
.
Adam(源自自适应矩估计)[4]使用类似于RMSProp的参数更新,但增加了动量项。它保留了参数梯度及其平方值的元素移动平均值,
您可以指定β1而且β2使用“GradientDecayFactor”
而且“SquaredGradientDecayFactor”
名称-值对参数。亚当使用移动平均线来更新网络参数
如果许多迭代的梯度是相似的,那么使用梯度的移动平均可以使参数更新在某个方向上获得动力。如果梯度包含大部分噪声,那么梯度的移动平均就会变小,因此参数更新也会变小。你可以指定ɛ通过使用‘ε’
名称-值对参数。默认值通常工作得很好,但对于某些问题,1这样大的值工作得更好。用亚当来训练神经网络,指定solverName
作为“亚当”
.完整的亚当更新还包括一个机制,以纠正偏见出现在训练开始。有关更多信息,请参见[4].
指定学习率α的所有优化算法“InitialLearnRate”
名称-值对参数。不同的优化算法对学习率的影响是不同的,所以最优学习率一般也不同。您还可以根据层和参数指定不同的学习率。有关更多信息,请参见在卷积层和全连接层中设置参数.
如果梯度以指数级增长,那么训练是不稳定的,并且可以在几次迭代中发散。这种“梯度爆炸”是由训练损失表示的南
或正
.梯度裁剪通过在较高的学习率和存在异常值的情况下稳定训练,有助于防止梯度爆炸[3].梯度裁剪可以使网络训练得更快,而且通常不会影响学习任务的准确性。
梯度裁剪有两种类型。
基于范数的梯度裁剪根据阈值重新缩放梯度,并且不改变梯度的方向。的“l2norm”
而且“global-l2norm”
的值GradientThresholdMethod
是基于范数的梯度裁剪方法。
基于值的梯度剪辑剪辑任何偏导数大于阈值,这可能导致梯度任意改变方向。基于值的梯度裁剪可能具有不可预测的行为,但足够小的变化不会导致网络发散。的“绝对值”
的价值GradientThresholdMethod
是一种基于值的梯度裁剪方法。
有关示例,请参见利用深度学习进行时间序列预测而且使用深度学习的序列到序列分类.
在损失函数中添加权重的正则化项 是减少过拟合的一种方法吗[1],[2].正则化项也被称为体重衰变.具有正则化项的损失函数为
在哪里 是权向量, 是正则化因子(系数),还是正则化函数 是
注意偏差不是正则化的[2].您可以指定正则化因子
通过使用“L2Regularization”
名称-值对参数。您还可以为不同的层和参数指定不同的正则化因子。有关更多信息,请参见在卷积层和全连接层中设置参数.
该软件用于网络训练的损失函数包括正则化项。但是,在训练过程中,命令窗口和训练进度图中显示的损失值仅为数据上的损失,不包括正则化项。
“ValidationPatience”
培训选项默认为正
R2018b的行为发生了变化
的默认值,从R2018b开始“ValidationPatience”
培训选项为正
,这意味着通过验证自动停止被关闭。这种行为可以防止在充分学习数据之前停止训练。
在以前的版本中,默认值为5
.要重现此行为,请设置“ValidationPatience”
选项5
.
R2018b的行为发生了变化
从R2018b开始,当保存检查点网络时,软件分配以net_checkpoint_
.在以前的版本中,软件分配以convnet_checkpoint_
.
如果您有保存和加载检查点网络的代码,那么请更新代码以加载具有新名称的文件。
[1]毕晓普c.m.模式识别与机器学习.施普林格,纽约,纽约,2006。
[2]墨菲,k.p.。机器学习:一个概率的视角.麻省理工学院出版社,剑桥,马萨诸塞州,2012年。
[3]帕斯卡努,R., T.米科洛夫,Y.本吉奥。"关于训练循环神经网络的难度"第30届机器学习国际会议论文集.Vol. 28(3), 2013, pp. 1310-1318。
[4]金玛,迪德里克和吉米巴。《亚当:随机优化方法》arXiv预打印arXiv:1412.6980(2014)。
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。