深度学习神经网络训练选项
返回由指定的优化器的培训选项选项
= trainingOptions (solverName
)solverName
. 要训练网络,请将训练选项用作列车网络
函数。
返回训练选项和由一个或多个名称-值对参数指定的附加选项。选项
= trainingOptions (solverName
,名称、值
)
创建一组选项来训练网络使用随机梯度下降与动量。每5个周期将学习率降低0.2倍。将训练的最大纪元数设置为20,并在每次迭代中使用包含64个观察值的小批处理。打开训练进度图。
选择= trainingOptions (“个”,...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”,0.2,...“LearnRateDropPeriod”5....“MaxEpochs”, 20岁,...“MiniBatchSize”,64,...“情节”,“训练进步”)
选项=培训选项带属性的SGDM:动量:0.9000初始LearnRate:0.0100 LearnRateSchedule:“分段”LearnRateDropFactor:0.2000 LearnRateDropPeriod:5 L2规则化:1.0000e-04梯度阈值方法:“l2norm”梯度阈值:Inf MaxEpochs:20小批量大小:64详细:1详细频率:50验证数据:[]ValidationFrequency:50 ValidationPatience:Inf Shuffle:'once'检查点路径:'ExecutionEnvironment:'auto'WorkerLoad:[]OutputFcn:[]绘图:'training progress'SequenceLength:'longest'SequencePaddingValue:0 SequencePaddingDirection:'right'DispatchingBackground:0 ResetInputNormalization:1 BatchNormalizationStatistics:'Po
当您为深度学习培训网络时,监控培训进度通常很有用。通过在培训期间绘制各种指标,您可以了解培训的进展情况。例如,您可以确定网络精度是否提高以及提高的速度,以及网络是否开始过度拟合训练数据。
当你指定“训练进步”
作为“情节”
价值trainingOptions
开始网络培训,列车网络
在每次迭代中创建图形并显示培训指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions
,则该图显示了每次的验证度量列车网络
验证网络。图中描绘了如下内容:
训练精度-每个小批量的分类精度。
平滑训练精度-平滑训练精度,通过对训练精度应用平滑算法获得。它比不平滑的精确度噪音更小,更容易发现趋势。
验证精度-整个验证集的分类精度(指定使用trainingOptions
).
培训损失,平滑训练损失,确认损失—每个小批量的损失、平滑版本的损失和验证集的损失classificationLayer
,则损失函数为交叉熵损失。有关用于分类和回归问题的损失函数的更多信息,请参见输出层.
对于回归网络,该图绘制的是均方根误差(RMSE),而不是精度。
这个图形标记了每一次训练纪元使用阴影背景。历元是整个数据集的完整过程。
在培训期间,您可以单击右上角的停止按钮停止培训并返回网络的当前状态。例如,当网络的精度达到稳定期,并且很明显精度不再提高时,您可能希望停止训练。单击“停止”按钮后,可能需要一段时间才能完成培训。训练结束后,,列车网络
返回经过训练的网络。
培训结束后,查看结果显示最终验证的准确性以及培训结束的原因。最终的验证指标已标记最后的情节。如果您的网络包含批处理规范化层,那么最终的验证度量可能与训练期间评估的验证度量不同。这是因为用于批处理归一化的均值和方差统计在训练完成后可能是不同的。例如,如果“BatchNormalizationStatisics”
训练方法是“人口”
,然后在训练之后,软件通过再次传递训练数据来完成批量标准化统计,并使用得到的均值和方差“BatchNormalizationStatisics”
训练方法是“移动”
,然后软件使用运行估计值来近似训练期间的统计数据,并使用统计数据的最新值。
在右侧,查看有关培训时间和设置的信息。要了解有关培训选项的更多信息,请参阅参数设置与卷积神经网络训练.
在培训过程中策划培训进度
训练网络,并在训练过程中绘制训练进度图。
加载训练数据,其中包含5000个数字图像。预留1000个图像用于网络验证。
[XTrain, YTrain] = digitTrain4DArrayData;idx = randperm(大小(XTrain, 4), 1000);XValidation = XTrain (:,:,:, idx);XTrain (::,:, idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];
构造一个网络来对数字图像数据进行分类。
layers = [imageInputLayer([28 28 1])]“填充”,“相同”maxPooling2dLayer(2,“大步走”2) convolution2dLayer(16日“填充”,“相同”maxPooling2dLayer(2,“大步走”32岁的,2)convolution2dLayer (3“填充”,“相同”)batchNormalizationLayer reluLayer fullyConnectedLayer(10)softmaxLayer classificationLayer];
指定网络训练选项。要在训练期间定期验证网络,请指定验证数据。选择“ValidationFrequency”
值,以便每个epoch大约验证一次网络。在培训过程中规划培训进度,指定“训练进步”
作为“情节”
价值。
选择= trainingOptions (“个”,...“MaxEpochs”8....“验证数据”,{XValidation,YValidation},...“ValidationFrequency”30岁的...“详细”假的,...“情节”,“训练进步”);
培训网络。
net=列车网络(XTrain、YTrain、图层、选项);
solverName
—训练网络求解器“个”
|“rmsprop”
|“亚当”
训练网络求解器,指定为下列任一种:
“个”
-使用随机梯度下降与动量(SGDM)优化器。可以使用。指定动量值“动量”
名称-值对的论点。
“rmsprop”
-使用RMSProp优化器。您可以使用“SquaredGradientDecayFactor”
名称-值对的论点。
“亚当”
-使用亚当优化器。可以指定梯度和平方梯度移动平均的衰减率“梯度衰减因子”
和“SquaredGradientDecayFactor”
分别命名值对参数。
有关不同求解器的更多信息,请参见随机梯度下降法.
指定可选的逗号分隔的字符对名称、值
参数。的名字
参数名和价值
为对应值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“InitialLearnRate”,0.03,“L2Regularization”,0.0005,“LearnRateSchedule”、“分段”
指定初始学习率为0.03L2.
正则化因子为0.0005,并指示软件通过乘以某个因子,每给定的历元数降低学习率。
“情节”
—在网络训练期间显示的图“没有”
(默认)|“训练进步”
在网络训练期间要显示的图,指定为逗号分隔对,由“情节”
以及下列其中一项:
“没有”
-在训练期间不要显示情节。
“训练进步”
-规划培训进度。该图显示了小批损失和准确性,验证损失和准确性,以及培训进展的附加信息。这个情节有一个停止按钮在右上角。点击按钮停止训练,返回网络当前状态。有关培训进度图的更多信息,请参见监控深度学习培训进度.
例子:“阴谋”,“训练进步”
“详细”
—显示培训进度信息的指标1.
(真正的
)(默认)|0
(假
)指示符用于在命令窗口中显示训练进度信息,指定为逗号分隔的对,由“详细”
,要么1.
(真正的
)或0
(假
).
verbose输出显示如下信息:
网络的分类
场 | 描述 |
---|---|
纪元 |
时代的数字。epoch对应于数据的一次完整传递。 |
迭代 |
迭代数。迭代对应于小批处理。 |
比赛进行时间 |
时间以小时、分钟和秒为单位流逝。 |
Mini-batch准确性 |
小批量的分类精度。 |
验证准确性 |
对验证数据的分类精度。如果不指定验证数据,则该函数不会显示该字段。 |
Mini-batch损失 |
迷你批处理上的损失。如果输出层是ClassificationOutputLayer 对象,则该损失为类间互斥的多类分类问题的交叉熵损失。 |
确认损失 |
验证数据的丢失。如果输出层是ClassificationOutputLayer 对象,则该损失为类间互斥的多类分类问题的交叉熵损失。如果不指定验证数据,则该函数不会显示该字段。 |
基础学习速率 |
基础学习率。软件将层的学习率因子乘以该值。 |
回归网络
场 | 描述 |
---|---|
纪元 |
时代的数字。epoch对应于数据的一次完整传递。 |
迭代 |
迭代数。迭代对应于小批处理。 |
比赛进行时间 |
时间以小时、分钟和秒为单位流逝。 |
Mini-batch RMSE |
小批量的均方根误差(RMSE)。 |
验证RMSE |
验证数据的RMSE。如果未指定验证数据,则软件不显示此字段。 |
Mini-batch损失 |
迷你批处理上的损失。如果输出层是RegressionOutputLayer 对象,则损失为一半均方误差。 |
确认损失 |
验证数据的丢失。如果输出层是RegressionOutputLayer 对象,则损失为一半均方误差。如果不指定验证数据,则软件不会显示此字段。 |
基础学习速率 |
基础学习率。软件将层的学习率因子乘以该值。 |
要指定验证数据,请使用“验证数据”
名称-值对。
例子:“详细”,假的
“详细频率”
—详细打印频率详细打印的频率,它是在打印到命令窗口之间的迭代次数,指定为由逗号分隔的对组成“详细频率”
和一个正整数。此选项仅在“详细”
价值等于真正的
.
如果你在训练期间验证网络,那么列车网络
每次进行验证时也会打印到命令窗口。
例子:“VerboseFrequency”,100年
“MaxEpochs”
—最大纪元数用于训练的最大纪元数,指定为逗号分隔对,由“MaxEpochs”
一个正整数。
迭代是梯度下降算法中使用小批量最小化损失函数的一步。epoch是训练算法在整个训练集上的完整通过。
例子:“MaxEpochs”,20
“MiniBatchSize”
—小批量的大小用于每个训练迭代的小批处理的大小,指定为逗号分隔的对“MiniBatchSize”
一个正整数。小批量是训练集的子集,用于评估损失函数的梯度和更新权值。看到随机梯度下降法.
例子:“MiniBatchSize”,256年
“洗牌”
—数据洗牌选项“一次”
(默认)|“永远”
|“every-epoch”
用于数据变换的选项,指定为组成的逗号分隔对“洗牌”
以及下列其中一项:
“一次”
-在培训之前,对培训和验证数据进行一次洗牌。
“永远”
-不要乱洗数据。
“every-epoch”
—在每个训练阶段之前洗牌训练数据,在每个网络验证之前洗牌验证数据。如果小批量大小不能均匀地除以训练样本的数量,那么列车网络
丢弃不适合每个纪元的最终完整小批的训练数据。为避免每个epoch都丢弃相同的数据,请设置“洗牌”
重视“every-epoch”
.
例子:“洗牌”,“every-epoch”
“验证数据”
—用于培训期间验证的数据培训期间用于验证的数据,指定为数据存储、表或包含验证预测值和响应的单元格数组。
控件支持的相同格式可以指定验证预测器和响应金宝app列车网络
函数。可以将验证数据指定为数据存储、表或单元格数组}{预测,反应
,在那里预测
包含验证预测器和反应
包含验证响应。
有关更多信息,请参阅图片
,序列
,特性
的输入参数列车网络
函数。
在训练中,,列车网络
计算验证数据的验证精度和验证损失。要指定验证频率,请使用“ValidationFrequency”
名称-值对的论点。您还可以使用验证数据在验证损失停止减少时自动停止训练。要启用自动验证停止,请使用“ValidationPatience”
名称-值对的论点。
如果网络的层在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证的准确性可以高于训练(小批量)的准确性。
将验证数据按照“洗牌”
价值。如果“洗牌”
价值等于“every-epoch”
,然后在每次网络验证之前对验证数据进行洗牌。
“ValidationFrequency”
—网络验证频率以迭代次数表示的网络验证频率,指定为逗号分隔对组成“ValidationFrequency”
一个正整数。
这个“ValidationFrequency”
值是验证度量评估之间的迭代次数。要指定验证数据,请使用“验证数据”
名称-值对的论点。
例子:“ValidationFrequency”,20
“ValidationPatience”
—停止验证的耐心正
(默认)|正整数耐心验证停止网络训练,指定为逗号分隔对组成“ValidationPatience”
一个正整数或正
.
这个“ValidationPatience”
值是在网络训练停止前,验证集上的损失可能大于或等于先前最小损失的次数。要启用自动验证停止,请指定一个正整数作为“ValidationPatience”
价值如果使用默认值正
,则训练在达到最大历元数后停止。要指定验证数据,请使用“验证数据”
名称-值对的论点。
例子:“验证耐心”,5
“InitialLearnRate”
—最初的学习速率用于培训的初始学习率,指定为逗号分隔对,包括“InitialLearnRate”
一个正标量。默认值为0.01“个”
解算器和0.001用于“rmsprop”
和“亚当”
解决者。如果学习率太低,那么培训需要很长时间。如果学习率过高,那么训练可能会达到次优结果或发散。
例子:“InitialLearnRate”,0.03
数据类型:单
|双
“LearnRateSchedule”
—在训练过程中降低学习速率的选择“没有”
(默认)|“分段”
选项,用于在训练期间放弃学习率,指定为逗号分隔对组成“LearnRateSchedule”
以及下列其中一项:
“没有”
-在整个培训过程中,学习率保持不变。
“分段”
-软件通过乘以某个系数,每隔一定的时间更新一次学习率。使用LearnRateDropFactor
参数的名称-值对指定此因子的值。使用LearnRateDropPeriod
名称-值对参数,用于指定乘法之间的历元数。
例子:“LearnRateSchedule”、“分段”
“LearnRateDropPeriod”
—降低学习率的时间段数用于降低学习率的历元数,指定为逗号分隔对,由“LearnRateDropPeriod”
和一个正整数。此选项仅在LearnRateSchedule
是“分段”
.
每次通过指定的历元数时,软件将全局学习率乘以下降系数。使用LearnRateDropFactor
名称-值对的论点。
例子:“LearnRateDropPeriod”,3
“LearnRateDropFactor”
—降低学习率的因素降低学习率的因素,指定为逗号分隔对,包括“LearnRateDropFactor”
和一个从0到1的标量。该选项仅当值为LearnRateSchedule
是“分段”
.
LearnRateDropFactor
是每次经过一定数量的纪元时,应用于学习率的乘数因子。属性指定纪元的数目LearnRateDropPeriod
名称-值对的论点。
例子:“LearnRateDropFactor”,0.1
数据类型:单
|双
“L2Regularization”
—L因素2.正则化L因素2.正则化(权重衰减),指定为逗号分隔对,由“L2Regularization”
一个非负标量。有关更多信息,请参见L2正则化.
可以为L指定乘数2.具有可学习参数的网络层的正则化。有关更多信息,请参阅在卷积和全连接层中设置参数.
例子:“L2Regularization”,0.0005
数据类型:单
|双
“动量”
—上一步的贡献前一次迭代的参数更新步骤对当前带动量随机梯度下降迭代的贡献,指定为逗号分离对,由“动量”
和从0到1的标量。值0表示上一步没有贡献,而值1表示上一步的最大贡献。
指定“动量”
值,则必须设置solverName
是“个”
.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法.
例子:“动量”,0.95
数据类型:单
|双
“梯度衰减因子”
—梯度移动平均的衰减率亚当求解器的梯度移动平均衰减率,指定为逗号分隔对组成“梯度衰减因子”
一个小于1的非负标量。梯度衰减率表示为β1.
在[4].
指定“梯度衰减因子”
值,则必须设置solverName
是“亚当”
.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法.
例子:“GradientDecayFactor”,0.95
数据类型:单
|双
“SquaredGradientDecayFactor”
—平方梯度移动平均的衰减率为亚当和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”
.默认值可以很好地解决大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法.
例子:“ε”,1e-6
数据类型:单
|双
“ResetInputNormalization”
—重置输入层规范化的选项真正的
(默认)|假
重置输入层规范化的选项,指定为以下选项之一:
真正的
-重置输入层归一化统计并在训练时重新计算。
假
-当训练时间为空时,计算归一化统计信息。
“BatchNormalizationStatistics”
—在批处理归一化层中评估统计信息的模式“人口”
(默认)|“移动”
批处理归一化层统计的评估方式,指定为:
“人口”
–使用人口统计数据。培训后,软件通过再次传递培训数据最终确定统计数据,并使用结果的平均值和方差。
“移动”
-使用更新步骤给出的运行估计估计训练期间的统计数据
在哪里 和 分别表示更新后的平均值和方差, 和 分别表示均值衰减值和方差衰减值, 和 分别表示图层输入的平均值和方差,以及 和 分别表示移动平均值和方差值的最新值。训练后,软件使用最新的移动均值和方差统计值。此选项仅支持CPU和单G金宝appPU培训。
“梯度阈值”
—梯度阈值正
(默认)|正标量梯度阈值,指定为逗号分隔对组成“梯度阈值”
和正
或者一个正标量。如果梯度值超过GradientThreshold
,然后根据渐变进行裁剪GradientThresholdMethod
.
例子:“GradientThreshold”6
“GradientThresholdMethod”
—梯度阈值方法“l2norm”
(默认)|“全局l2norm”
|“绝对值”
梯度阈值方法用于剪辑超过梯度阈值的梯度值,指定为逗号分隔对组成“GradientThresholdMethod”
以及下列其中一项:
“l2norm”
-如果L2.可学习参数的梯度范数大于GradientThreshold
,然后缩放梯度,使L2.范数等于GradientThreshold
.
“全局l2norm”
-如果全局2.标准L,大于GradientThreshold
,然后将所有梯度按……的倍数缩放梯度阈值/
L.全球L2.Norm考虑了所有可学习的参数。
“绝对值”
—可学习参数梯度中单个偏导数的绝对值大于GradientThreshold
,然后缩放偏导数,使其大小等于GradientThreshold
保留偏导数的符号。
有关更多信息,请参见梯度削波.
例子:“梯度阈值法”,“全局l2norm”
“SequenceLength”
—选择填充,截断,或分割输入序列“最长的”
(默认)|“最短”
|正整数填充、截断或拆分输入序列的选项,指定为以下之一:
“最长的”
—在每个小批量中填充序列,使其与最长序列具有相同的长度。这个选项不会丢弃任何数据,尽管填充会给网络带来噪声。
“最短”
-截断每个小批次中的序列,使其与最短序列具有相同的长度。此选项确保不添加填充,但会以丢弃数据为代价。
正整数—对于每个小批量,将序列填充到指定长度的最近倍数,该倍数大于最小批量中序列的最长长度,然后将序列分割成指定长度的更小的序列。如果发生分裂,则软件创建额外的小批量。如果完整序列无法装入内存,则使用此选项。或者,尝试通过设置来减少每个小批量的序列数量“MiniBatchSize”
选择较低的值。
要了解有关填充、截断和拆分输入序列的效果的更多信息,请参阅序列填充、截断和分割.
例子:“SequenceLength”、“最短的
“SequencePaddingDirection”
—填充或截断的方向“对”
(默认)|“左”
填充或截断的方向,指定为下列任一种:
“对”
—在右侧填充或截断序列。序列在同一时间步开始,软件截断或添加填充到序列的结束。
“左”
-在左侧填充或截断序列。该软件截断或添加填充到序列的开始,以便序列在同一时间步结束。
因为LSTM层处理序列数据的时间一步一次,当层输出模式
财产是“最后”
,最后时间步骤中的任何填充都会对层输出产生负面影响。要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”
选择“左”
.
对于序列到序列网络(当输出模式
财产是“顺序”
对于每个LSTM层),第一时间步中的任何填充都会对早期时间步的预测产生负面影响。要填充或截断右侧的序列数据,请设置“SequencePaddingDirection”
选择“对”
.
要了解有关填充、截断和拆分输入序列的效果的更多信息,请参阅序列填充、截断和分割.
“SequencePaddingValue”
—值填充输入序列用于填充输入序列的值,指定为标量。该选项仅在以下情况下有效:序列长度
是“最长的”
或者一个正整数。不要用楠
,因为这样做会在整个网络中传播错误。
例子:“SequencePaddingValue”,-1
“ExecutionEnvironment”
—培训网络硬件资源“自动”
(默认)|“cpu”
|“gpu”
|“multi-gpu”
|“平行”
培训网络硬件资源,指定为以下之一:
“自动”
—如果有图形处理器,请使用图形处理器。否则,请使用CPU。
“cpu”
—使用CPU。
“gpu”
-使用GPU。
“multi-gpu”
-在一台机器上使用多个gpu,基于默认集群配置文件使用本地并行池。如果当前没有并行池,软件会启动一个并行池,池的大小等于可用gpu的数量。
“平行”
-基于默认群集配置文件使用本地或远程并行池。如果没有当前并行池,软件将使用默认群集配置文件启动一个并行池。如果该池可以访问GPU,则只有具有唯一GPU的工作人员执行培训计算。如果该池没有GPU,则在所有可用的GPU上进行培训而不是CPU工人。
有关何时使用不同执行环境的更多信息,请参阅并行和在云中扩展深度学习.
“gpu”
,“multi-gpu”
,“平行”
选项需要并行计算工具箱™。要使用GPU进行深度学习,您还必须拥有受支持的GPU设备。有关支持的设备的信息,请参阅金宝appGPU支金宝app持情况(并行计算工具箱).如果您选择其中一个选项,而并行计算工具箱或合适的GPU不可用,则软件将返回错误。
想要看到并行训练时的表现改善,试着扩大MiniBatchSize
和InitialLearnRate
培训选项的图形处理器的数量。
训练长短期记忆网络仅支持单CPU或单GPU训练。金宝app
用于多gpu训练或并行训练的数据存储必须是可分区的。有关更多信息,请参见使用数据存储进行并行培训和后台调度.
如果你使用“multi-gpu”
选项具有可分区的输入数据存储和“调度背景”
选项,然后软件启动一个大小等于默认池大小的并行池。工人与独特的图形处理器执行训练计算。其余工人用于后台调度。
例子:“ExecutionEnvironment”、“cpu的
“工作量”
—平行工负荷分配在gpu或cpu之间进行并行工作负载划分,指定为逗号分隔的对“工作量”
以及下列其中一项:
从0到1的标量-每台机器上用于网络训练计算的工人的比例。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。
正整数-用于网络训练计算的每台机器上的工人数量。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。
数字向量-网络训练负荷为并行池中的每个工作者。为一个向量W
工人我
得到一个分数W(我)/ (W)和
工作的数量(每个小批量的示例数量)。如果您使用启用了后台调度的迷你批处理数据存储中的数据来训练网络,那么您可以将一个worker负载分配为0,以便使用该worker在后台获取数据。指定的向量必须为并行池中的每个工作者包含一个值。
如果并行池可以访问GPU,那么没有唯一GPU的worker将不会被用于训练计算。默认的GPU池是使用所有具有唯一GPU的worker进行训练计算,其余的worker用于后台调度。如果池不能访问用于培训的gpu和cpu,则默认为每台机器使用一个worker来进行后台数据调度。
“调度背景”
—使用背景调度假
(默认)|真正的
使用后台调度(异步预取队列)从指定为的数据存储中读取训练数据假
或真正的
.后台调度需要并行计算工具箱。
DispatchInBackground
仅支持可分区的数金宝app据存储。有关更多信息,请参见使用数据存储进行并行培训和后台调度.
“检查点路径”
—保存检查点网络的路径''
(默认)|特征向量保存检查点网络的路径,指定为由逗号分隔的对组成“检查点路径”
一个字符向量。
如果不指定路径(即使用默认路径)''
),则该软件不保存任何检查点网络。
如果指定路径,则列车网络
在每个历元后将检查点网络保存到此路径,并为每个网络指定唯一的名称。然后,您可以加载任何检查点网络并从该网络恢复训练。
如果文件夹不存在,则必须首先创建它,然后再指定保存检查点网络的路径。如果指定的路径不存在,则trainingOptions
返回一个错误。
有关保存网络检查点的详细信息,请参见保存检查点网络并恢复培训.
例子:“CheckpointPath”、“C: \ Temp \检查点”
数据类型:字符
“OutputFcn”
—输出函数训练期间要调用的输出函数,指定为逗号分隔对,由“OutputFcn”
以及函数句柄或函数句柄的单元数组。列车网络
在训练开始之前、每次迭代之后以及训练结束之后调用指定的函数一次。列车网络
传递一个包含以下字段信息的结构:
场 | 描述 |
---|---|
纪元 |
当前时代数量 |
迭代 |
当前迭代次数 |
TimeSinceStart |
训练开始后的时间,以秒为单位 |
培训损失 |
当前mini-batch损失 |
验证损失 |
验证数据的丢失 |
BaseLearnRate |
当前基础学习率 |
训练准确性 |
当前小批量的准确性(分类网络) |
TrainingRMSE |
当前小批量(回归网络)上的RMSE |
验证准确性 |
验证数据的准确性(分类网络) |
ValidationRMSE |
验证数据的RMSE(回归网络) |
状态 |
当前训练状态,可能值为“开始” ,“迭代” ,或“完成” |
如果某个字段对输出函数的某个调用不计算或不相关,则该字段包含一个空数组。
您可以使用输出函数来显示或绘制进度信息,或停止培训。尽早停止训练,让你的输出功能回归真正的
.如果有输出函数返回真正的
,然后训练结束列车网络
返回最新的网络。有关如何使用输出函数的示例,请参阅在深度学习网络培训中定制输出.
数据类型:功能手柄
|单间牢房
选项
——培训选项TrainingOptionsSGDM
|TrainingOptionsRMSProp
|培训选项ADAM
培训选择,作为TrainingOptionsSGDM
,TrainingOptionsRMSProp
,或培训选项ADAM
对象。要训练神经网络,使用训练选项作为输入参数列车网络
函数。
如果solverName
=“个”
,“rmsprop”
,或“亚当”
,则训练选项将作为TrainingOptionsSGDM
,TrainingOptionsRMSProp
,或培训选项ADAM
对象,分别。
您可以编辑的培训选项属性TrainingOptionsSGDM
,培训选项ADAM
,TrainingOptionsRMSProp
直接对象。例如,在使用trainingOptions
功能,可以编辑MiniBatchSize
房地产直接:
选择= trainingOptions(个);选项。MiniBatchSize = 64;
对于大多数深度学习任务,您可以使用预先训练的网络,并使其适应您自己的数据。有关如何使用迁移学习来重新训练卷积神经网络来对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类. 或者,您可以使用layerGraph
的对象列车网络
和trainingOptions
功能。
如果trainingOptions
函数不提供任务所需的训练选项,则可以使用自动区分创建自定义训练循环。想要了解更多,请看为自定义训练循环定义深度学习网络.
对于卷积层和全连通层,权值和偏差的初始化由增重剂
和双星化剂
属性的层,分别。有关如何更改权重和偏差的初始化的示例,请参见在卷积层中指定初始权重和偏差和在完全连接的层中指定初始权重和偏移.
标准梯度下降算法更新网络参数(权值和偏差),使损失函数最小化,方法是在每次迭代时,在损失的负梯度方向上采取小步骤,
在哪里 是迭代次数, 就是学习率, 是参数向量,并且 为损失函数。在标准梯度下降算法中,损失函数的梯度, ,使用整个训练集进行评估,而标准梯度下降算法一次使用整个数据集。
相反,在每次迭代时随机的梯度下降算法评估梯度,并使用训练数据的子集更新参数。在每次迭代中使用一个称为迷你批处理的不同子集。使用小批量的训练算法在整个训练集上的完整通过为1纪元.随机梯度下降是随机的,因为使用小批量计算的参数更新是使用完整数据集的参数更新的噪声估计。参数可以指定小批量大小和最大纪元数“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”
.
亚当(来自自适应估计时刻)[4]使用类似于RMSProp的参数更新,但添加了动量项。它保持参数梯度及其平方值的元素移动平均,
您可以指定β1.和β2.使用“梯度衰减因子”
和“SquaredGradientDecayFactor”
分别命名值对参数。Adam使用移动平均值更新网络参数,如下所示:
如果许多迭代中的梯度是相似的,那么使用梯度的移动平均值可以使参数更新在某个方向上获得动量。如果梯度包含大部分的噪声,那么梯度的移动平均会变得更小,因此参数更新也会变得更小。您可以指定ɛ通过使用‘ε’
名称-值对参数。默认值通常效果良好,但对于某些问题,大到1的值效果更好。要使用Adam训练神经网络,请指定solverName
像“亚当”
.完整的亚当更新还包括一个机制,以纠正在训练开始时出现的偏差。有关更多信息,请参见[4].
指定学习速率α为所有优化算法使用“InitialLearnRate”
名称-值对的论点。对于不同的优化算法,学习率的效果是不同的,所以最优学习率一般也是不同的。您还可以指定不同层次和参数的学习速率。有关更多信息,请参见在卷积和全连接层中设置参数.
如果梯度呈指数级增长,那么训练是不稳定的,可能在几次迭代中发散。这种“梯度爆炸”是由训练损失来表示的楠
或正
.梯度剪辑通过在较高的学习率和异常值存在的情况下稳定训练,有助于防止梯度爆炸[3].梯度裁剪可以更快地训练网络,而且通常不会影响学习任务的准确性。
有两种类型的渐变剪辑。
基于norm的梯度裁剪基于阈值缩放梯度,而不改变梯度的方向。这个“l2norm”
和“全局l2norm”
的值GradientThresholdMethod
是基于范数的梯度裁剪方法。
基于值的梯度裁剪裁剪任何大于阈值的偏导数,这会导致梯度任意改变方向。基于值的梯度裁剪可能具有不可预测的行为,但足够小的变化不会导致网络发散。这个“绝对值”
价值GradientThresholdMethod
是一种基于值的梯度裁剪方法。
有关示例,请参见基于深度学习的时间序列预测和基于深度学习的序列到序列分类.
将权重的正则化项添加到损失函数中 是否有一种方法可以减少过度拟合[1],[2].正则化项也称为体重衰变. 具有正则化项的损失函数的形式为
在哪里 是权重向量, 是正则化因子(系数)和正则化函数 是
请注意,偏差不是正则化的[2].您可以指定正则化因子
通过使用“L2Regularization”
名称-值对的论点。您还可以为不同的层和参数指定不同的正则化因子。有关更多信息,请参见在卷积和全连接层中设置参数.
软件用于网络训练的损失函数包括正则化项。但是,训练期间在命令窗口和训练进度图中显示的损失值仅为数据损失,不包括正则化项。
“ValidationPatience”
培训选项默认为正
R2018b中的行为发生了变化
从R2018b开始“ValidationPatience”
训练方法是正
,这意味着关闭了通过验证自动停止的功能。这种行为防止训练在充分从数据中学习之前停止。
在以前的版本中,默认值是5.
. 要复制此行为,请设置“ValidationPatience”
选择5.
.
R2018b中的行为发生了变化
从R2018b开始,保存检查点网络时,软件会分配以开头的文件名net_checkpoint_
.在以前的版本中,软件分配的文件名以convnet_checkpoint_
.
如果您有保存和加载检查点网络的代码,那么请更新代码以使用新名称加载文件。
[1]毕晓普模式识别和机器学习.施普林格,纽约,纽约,2006。
K. P.墨菲机器学习:概率视角. 麻省理工学院出版社,马萨诸塞州剑桥,2012年。
帕斯卡努,R., T. Mikolov, Y. Bengio。“关于训练递归神经网络的困难”。第30届国际机器学习会议论文集.[j] .岩石力学与工程学报,2013,34(3):341 - 346。
[4]金玛,迪德里克和吉米·巴。"亚当:随机优化的方法"arXiv预印本arXiv: 1412.6980(2014).
您有一个连接到MATLAB-Befehl entspricht:
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。Webbrowser unterstützen keine MATLAB-Befehle。
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区站点不适合您所在位置的访问。