深度学习神经网络训练选项
返回指定的优化器的训练选项选项
= trainingOptions (solverName
)solverName
. 要训练网络,请将训练选项用作trainNetwork
函数。
返回训练选项和由一个或多个名称-值对参数指定的附加选项。选项
= trainingOptions (solverName
,名称,值
)
创建一组选项来训练网络使用随机梯度下降与动量。每5个周期将学习率降低0.2倍。将训练的最大纪元数设置为20,并在每次迭代中使用包含64个观察值的小批处理。打开训练进度图。
选择= trainingOptions ('sgdm',...“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
开始网络培训,trainNetwork
在每次迭代中创建图形并显示培训指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions
,图中显示每次验证的度量trainNetwork
验证网络。图绘制以下内容:
训练精度-每个小批量的分类精度。
平滑的训练精度—平滑训练精度,将平滑算法应用到训练精度上获得。与不平滑的精度相比,它的噪声更小,因此更容易发现趋势。
验证准确性-整个验证集的分类精度(指定使用trainingOptions
).
培训损失,平滑培训损失,确认损失—每个小批量的损失,它的平滑版本,和验证集的损失,分别。如果你的网络的最后一层是classificationLayer
,然后损失函数是交叉熵损失。有关分类和回归问题的丢失函数的更多信息,请参阅输出层.
对于回归网络,该图绘制的是均方根误差(RMSE),而不是精度。
图标记了每次培训纪元使用阴影背景。历元是整个数据集的完整过程。
在培训过程中,可以通过单击右上角的“停止”按钮停止培训,返回当前网络状态。例如,当网络的准确性达到一个平台时,您可能想要停止训练,并且很明显准确性不再提高。点击停止按钮后,可能需要一段时间才能完成培训。一旦培训完成,trainNetwork
返回训练过的网络。
培训结束后,查看结果显示最终验证的准确性和培训完成的原因。最后的验证度量被标记最后的情节。如果您的网络包含批处理规范化层,那么最终的验证度量可能与训练期间评估的验证度量不同。这是因为用于批处理归一化的均值和方差统计在训练完成后可能是不同的。例如,如果“BatchNormalizationStatisics”
培训选项是'人口'
,训练结束后,软件再对训练数据进行一次遍历,并使用得到的平均值和方差,最终完成批归一化统计。如果“BatchNormalizationStatisics”
培训选项是“移动”
,然后软件使用运行估计值来近似训练期间的统计数据,并使用统计数据的最新值。
在右侧可查看培训时间和设置信息。要了解更多培训选项,请参见卷积神经网络参数的建立与训练.
训练期间的训练进展
训练网络,并在训练过程中绘制训练进度图。
加载培训数据,其中包含5000个数字图像。留出1000个图像以进行网络验证。
[xtrain,ytrain] = DigitTrain4darraydata;idx = randperm(大小(xtrain,4),1000);xvalidation = XTrain(::::,IDX);XTrain(::::,idx)= [];YValidation = Ytrain(IDX);Ytrain(IDX)= [];
构造一个网络来对数字图像数据进行分类。
层=[imageInputLayer([28 1])卷积层(3,8,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”,“相同”maxPooling2dLayer(2,“步”,2)卷积2dlayer(3,32,“填充”,“相同”) batchNormalizationLayer relullayer fulllyconnectedlayer (10) softmaxLayer classificationLayer];
指定网络训练选项。要在训练期间定期验证网络,请指定验证数据。选择“ValidationFrequency”
值,以便每个epoch大约验证一次网络。在培训过程中规划培训进度,指定“训练进步”
随着“阴谋”
价值。
选择= trainingOptions ('sgdm',...“MaxEpochs”8...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”30岁的...'verbose'假的,...“阴谋”,“训练进步”);
培训网络。
网= trainNetwork (XTrain、YTrain层,选择);
solverName
—训练网络求解器'sgdm'
|'rmsprop'
|'亚当'
训练网络求解器,指定为下列任一种:
'sgdm'
-使用随机梯度下降动量(SGDM)优化器。您可以使用“动量”
名称-值对的论点。
'rmsprop'
—使用RMSProp优化器。您可以指定衰减速率的平方梯度移动平均使用“SquaredGradientDecayFactor”
名称-值对的论点。
'亚当'
-使用亚当优化器。可以指定梯度和平方梯度移动平均的衰减率“梯度衰减因子”
和“SquaredGradientDecayFactor”
名称-值对参数。
有关不同求解器的更多信息,请参见随机梯度下降法.
指定可选的逗号分隔的对名称,值
论据。姓名
参数名和价值
为对应值。姓名
必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值
.
'InitialLearnrate',0.03,'L2Regularization',0.0005,“学习”,'分段'
指定初始学习率为0.03L2.
正则化因子为0.0005,并指示软件通过与某一因子相乘来降低每一给定纪元数的学习率。
“阴谋”
—在网络训练期间显示的图“没有”
(默认)|“训练进步”
在网络训练期间要显示的图,指定为逗号分隔对,由“阴谋”
以及下列其中一项:
“没有”
-培训期间不要显示绘图。
“训练进步”
-规划培训进度。该图显示了小批损失和准确性,验证损失和准确性,以及培训进展的附加信息。这个情节有一个停止按钮在右上角。单击按钮停止培训并返回网络的当前状态。有关培训进度图的更多信息,请参阅监控深度学习训练进展.
例子:“阴谋”,“训练进步”
'verbose'
—显示培训进度信息的指标1.
(真正的
)(默认)|0
(假
)指示指示在命令窗口中显示培训进度信息,指定为逗号分隔的对'verbose'
和任何一种1.
(真正的
)或0
(假
).
详细输出显示以下信息:
网络的分类
场 | 描述 |
---|---|
纪元 |
纪念碑。epoch对应于数据的完整通行证。 |
迭代 |
迭代数。迭代对应于小批处理。 |
时间 |
时间以小时、分钟和秒为单位流逝。 |
小批量精度 |
在小批量上的分类精度。 |
验证准确性 |
对验证数据的分类精度。如果不指定验证数据,则该函数不会显示该字段。 |
Mini-batch损失 |
迷你批处理上的损失。如果输出层是ClassificationOutputLayer 对象,则该损失为类间互斥的多类分类问题的交叉熵损失。 |
确认损失 |
验证数据的丢失。如果输出层是ClassificationOutputLayer 对象,则该损失为类间互斥的多类分类问题的交叉熵损失。如果不指定验证数据,则该函数不会显示该字段。 |
基本学习率 |
基础学习率。软件将层的学习率因子乘以该值。 |
回归网络
场 | 描述 |
---|---|
纪元 |
纪念碑。epoch对应于数据的完整通行证。 |
迭代 |
迭代数。迭代对应于小批处理。 |
时间 |
时间以小时、分钟和秒为单位流逝。 |
Mini-batch RMSE |
小批量的均方根误差(RMSE)。 |
验证RMSE |
验证数据的RMSE。如果不指定验证数据,则软件不会显示此字段。 |
Mini-batch损失 |
迷你批处理上的损失。如果输出层是RegressionOutputLayer 对象,则损失为一半均方误差。 |
确认损失 |
验证数据的丢失。如果输出层是RegressionOutputLayer 对象,则损失为一半均方误差。如果不指定验证数据,则软件不会显示此字段。 |
基本学习率 |
基础学习率。软件将层的学习率因子乘以该值。 |
要指定验证数据,请使用“ValidationData”
名称-值对。
例子:“详细”,假的
“VerboseFrequency”
—详细打印频率详细打印的频率,它是在打印到命令窗口之间的迭代次数,指定为由逗号分隔的对组成“VerboseFrequency”
一个正整数。此选项仅在'verbose'
值=真正的
.
如果您在培训期间验证网络,那么trainNetwork
每次验证发生时也打印到命令窗口。
例子:“VerboseFrequency”,100年
“MaxEpochs”
—最大纪元数用于培训的最大纪元数量,指定为逗号分隔的对组成“MaxEpochs”
一个正整数。
迭代是梯度下降算法中使用小批量最小化损失函数的一步。epoch是训练算法在整个训练集上的完整通过。
例子:“MaxEpochs”,20
“MiniBatchSize”
—小批量的大小用于每个训练迭代的小批处理的大小,指定为逗号分隔的对“MiniBatchSize”
一个正整数。迷你批处理是训练集的子集,用于评估损耗功能的梯度并更新权重。看随机梯度下降法.
例子:“MiniBatchSize”,256年
“洗牌”
—数据变换选项“一次”
(默认)|'绝不'
|“every-epoch”
用于数据变换的选项,指定为组成的逗号分隔对“洗牌”
以及下列其中一项:
“一次”
—在训练前洗牌一次训练和验证数据。
'绝不'
-不要乱洗数据。
“every-epoch”
—在每个训练阶段之前洗牌训练数据,在每个网络验证之前洗牌验证数据。如果小批量大小不能均匀地除以训练样本的数量,那么trainNetwork
丢弃不适合每个纪元的最终完整小批的训练数据。为避免每个epoch都丢弃相同的数据,请设置“洗牌”
重视“every-epoch”
.
例子:“洗牌”,“every-epoch”
“ValidationData”
—用于培训期间验证的数据用于培训期间验证的数据,指定为包含验证预测器和响应的数据存储、表或单元阵列。
控件支持的相同格式可以指定验证预测器和响应万博1manbetxtrainNetwork
函数。您可以将验证数据指定为数据存储,表或单元格数组{预测器,答复}
,在那里预测
包含验证预测器和响应
包含验证响应。
有关更多信息,请参见图片
,序列
,特性
的输入参数trainNetwork
函数。
在培训期间,trainNetwork
计算验证数据的验证精度和验证损失。要指定验证频率,请使用“ValidationFrequency”
名称-值对的论点。您还可以使用验证数据在验证损失停止减少时自动停止训练。要启用自动验证停止,请使用“ValidationPatience”
名称-值对的论点。
如果网络的层在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证的准确性可以高于训练(小批量)的准确性。
验证数据根据“洗牌”
价值。如果“洗牌”
值=“every-epoch”
,然后在每次网络验证之前对验证数据进行洗牌。
“ValidationFrequency”
—网络验证频率迭代数量的网络验证频率,指定为逗号分隔对组成“ValidationFrequency”
一个正整数。
这个“ValidationFrequency”
值是验证度量评估之间的迭代次数。要指定验证数据,请使用“ValidationData”
名称-值对的论点。
例子:'验证职业',20
“ValidationPatience”
—停止验证的耐心Inf
(默认)|正整数耐心验证停止网络训练,指定为逗号分隔对组成“ValidationPatience”
一个正整数或Inf
.
这个“ValidationPatience”
值是在网络训练停止前,验证集上的损失可能大于或等于先前最小损失的次数。要启用自动验证停止,请指定一个正整数作为“ValidationPatience”
价值如果使用默认值Inf
,则训练在达到最大纪元数后停止。要指定验证数据,请使用“ValidationData”
名称-值对的论点。
例子:“ValidationPatience”,5
“InitialLearnRate”
—初始学习率用于训练的初始学习率,指定为逗号分隔对组成“InitialLearnRate”
一个正标量。默认值为0.01'sgdm'
求解器和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
成为'sgdm'
.默认值适用于大多数问题。有关不同求解器的更多信息,请参见随机梯度下降法.
例子:“动量”,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万博1manbetxPU培训。
“GradientThreshold”
—梯度阈值Inf
(默认)|积极的标量梯度阈值,指定为逗号分隔对组成“GradientThreshold”
和Inf
或正标量。如果梯度超过GradientThreshold
,然后根据GradientThresholdMethod
.
例子:“GradientThreshold”6
'GradientThresholdMethod'
—梯度阈值方法“l2norm”
(默认)|“global-l2norm”
|“绝对值”
梯度阈值方法用于剪辑超过梯度阈值的梯度值,指定为逗号分隔对组成'GradientThresholdMethod'
以及下列其中一项:
“l2norm”
-如果L2.可学习参数的梯度范数大于GradientThreshold
,然后缩放梯度,使L2.规范=GradientThreshold
.
“global-l2norm”
—全局L2.规范,L,比GradientThreshold
,然后将所有梯度缩放到一个因素梯度阈值/
L.全球L2.Norm考虑了所有可学习的参数。
“绝对值”
- 如果在学习参数的梯度中的单个部分导数的绝对值大于GradientThreshold
,然后缩放偏导数,使其大小等于GradientThreshold
保留偏导数的符号。
有关更多信息,请参见梯度剪裁.
例子:“GradientThresholdMethod”、“global-l2norm”
“SequenceLength”
—填充,截断或分割输入序列选项“最长”
(默认)|“最短的”
|正整数填充、截断或拆分输入序列的选项,指定为以下选项之一:
“最长”
—在每个小批量中填充序列,使其与最长序列具有相同的长度。这个选项不会丢弃任何数据,尽管填充会给网络带来噪声。
“最短的”
-截断每个小批次中的序列,使其与最短序列具有相同的长度。此选项确保不添加填充,但会以丢弃数据为代价。
正整数—对于每个小批量,将序列填充到指定长度的最近倍数,该倍数大于最小批量中序列的最长长度,然后将序列分割成指定长度的更小的序列。如果发生分裂,则软件创建额外的小批量。如果完整序列无法装入内存,则使用此选项。或者,尝试通过设置来减少每个小批量的序列数量“MiniBatchSize”
选择较低的值。
要了解有关填充、截断和拆分输入序列的效果的更多信息,请参阅序列填充、截断和分割.
例子:“SequenceLength”、“最短的
“SequencePaddingDirection”
—填充或截断的方向“对”
(默认)|“左”
填充或截断的方向,指定为下列任一种:
“对”
—在右侧填充或截断序列。序列在同一时间步开始,软件截断或添加填充到序列的结束。
“左”
- 左侧或截断序列。该软件截断或将填充添加到序列的开始,使序列同时结束。
因为LSTM层处理序列数据的时间一步一次,当层输出模式
属性是“最后”
,最后时间步骤中的任何填充都会对层输出产生负面影响。要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”
选项“左”
.
对于序列到序列网络(当输出模式
属性是“序列”
对于每个LSTM层),第一时间步中的任何填充都会对早期时间步的预测产生负面影响。要填充或截断右侧的序列数据,请设置“SequencePaddingDirection”
选项“对”
.
要了解有关填充、截断和拆分输入序列的效果的更多信息,请参阅序列填充、截断和分割.
“SequencePaddingValue”
—值填充输入序列用于填充输入序列的值,指定为标量。该选项仅在以下情况下有效:SequenceLength
是“最长”
或正整数。不要用垫缝南
,因为这样做可以在整个网络中传播错误。
例子:“SequencePaddingValue”,-1
“ExecutionEnvironment”
—培训网络硬件资源“自动”
(默认)|“cpu”
|“图形”
|'多gpu'
|“平行”
培训网络的硬件资源,指定为以下之一:
“自动”
—如果有图形处理器,请使用图形处理器。否则,请使用CPU。
“cpu”
-使用CPU。
“图形”
—使用GPU。
'多gpu'
- 在一台计算机上使用多个GPU,使用本地并行池基于默认群集配置文件。如果没有当前并行池,则该软件将启动具有等于可用GPU的数量的池大小的并行池。
“平行”
-根据默认集群配置文件使用本地或远程并行池。如果当前没有并行池,软件将使用默认的集群配置文件启动一个并行池。如果池可以访问GPU,那么只有拥有唯一GPU的工作者才能进行训练计算。如果池没有gpu,则在所有可用的CPU worker上进行培训。
有关何时使用不同执行环境的更多信息,请参见并行和在云中扩展深度学习.
“图形”
,'多gpu'
,“平行”
选项需要并行计算工具箱™。要使用GPU进行深度学习,您还必须拥有受支持的GPU设备。有关支持的设备的信息,请参阅万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱).如果您选择其中一个选项,而并行计算工具箱或合适的GPU不可用,则软件将返回错误。
要想在并行训练中看到绩效的改善,请尝试扩大训练规模MiniBatchSize
和InitialLearnRate
培训选项的图形处理器的数量。
培训长短短期内存网络仅支持单个CPU或单个GPU培训。万博1manbetx
用于多gpu训练或并行训练的数据存储必须是可分区的。有关更多信息,请参见使用数据存储进行并行培训和后台调度.
如果你使用'多gpu'
选项具有可分区的输入数据存储和“DispatchInBackground”
选项,然后软件启动一个大小等于默认池大小的并行池。工人与独特的图形处理器执行训练计算。其余工人用于后台调度。
例子:“ExecutionEnvironment”、“cpu的
“WorkerLoad”
—并行工作负载划分在gpu或cpu之间进行并行工作负载划分,指定为逗号分隔的对“WorkerLoad”
以及下列其中一项:
从0到1的标量-每台机器上用于网络训练计算的工人的比例。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。
正整数-用于网络训练计算的每台机器上的工人数量。如果您使用启用后台分派的迷你批处理数据存储中的数据来训练网络,那么其余的工作人员将在后台获取和预处理数据。
数字向量-并行池中每个工作者的网络训练负载。对于向量W
、工人我
获得分数W(我)/ (W)和
工作的数量(每个小批量的示例数量)。如果您使用启用后台调度的小型批处理数据存储中的数据来训练网络,则可以分配工作负载0,以使用该工作负载在后台获取数据。指定的向量必须在并行池中每个辅助进程包含一个值。
如果并行池可以访问GPU,则没有唯一GPU的工作线程将永远不会用于培训计算。具有GPU的池的默认设置是使用具有唯一GPU的所有工作线程进行培训计算,剩余工作线程用于后台调度。如果池没有访问GPU的权限,而CPU用于培训,则de故障是每台机器使用一名工人进行后台数据调度。
“DispatchInBackground”
—使用背景调度假
(默认)|真正的
使用后台调度(异步预取队列)从指定为的数据存储中读取训练数据假
或真正的
.后台调度需要并行计算工具箱。
DispatchInBackground
仅支持可分区的数万博1manbetx据存储。有关更多信息,请参见使用数据存储进行并行培训和后台调度.
“CheckpointPath”
—保存检查点网络的路径''
(默认)|特征向量保存检查点网络的路径,指定为由逗号分隔的对组成“CheckpointPath”
和一个字符矢量。
如果不指定路径(即使用默认路径)''
),然后软件不保存任何检查点网络。
如果指定路径,则trainNetwork
在每个epoch之后将检查点网络保存到此路径,并为每个网络分配一个唯一的名称。然后,您可以加载任何检查点网络,并从该网络恢复训练。
如果文件夹不存在,则必须首先创建它,然后再指定保存检查点网络的路径。如果指定的路径不存在,则trainingOptions
返回错误。
有关保存网络检查点的详细信息,请参阅保存检查点网络和恢复培训.
例子:“CheckpointPath”、“C: \ Temp \检查点”
数据类型:字符
“OutputFcn”
—输出函数训练期间要调用的输出函数,指定为逗号分隔的对“OutputFcn”
以及函数句柄或函数句柄的单元数组。trainNetwork
在训练开始之前、每次迭代之后以及训练结束之后调用指定的函数一次。trainNetwork
传递一个包含以下字段信息的结构:
场 | 描述 |
---|---|
纪元 |
当前的纪元数 |
迭代 |
当前迭代次数 |
TimeSinceStart |
训练开始后的时间,以秒为单位 |
TrainingLoss |
当前mini-batch损失 |
ValidationLoss |
验证数据的丢失 |
基准 |
当前基础学习率 |
TrainingAccuracy |
当前小批量的准确性(分类网络) |
TrainingRMSE |
当前小批处理(回归网络)上的RMSE |
ValidationAccuracy |
验证数据的准确性(分类网络) |
ValidationRMSE |
验证数据的RMSE(回归网络) |
陈述 |
当前训练状态,可能值为“开始” ,“迭代” ,或“完成” |
如果某个字段对输出函数的某个调用不计算或不相关,则该字段包含一个空数组。
您可以使用输出函数来显示或绘制进度信息,或停止培训。尽早停止训练,让你的输出功能回归真正的
.如果有输出函数返回真正的
然后训练完成和trainNetwork
返回最新的网络。有关如何使用输出函数的示例,请参见自定义深度学习网络训练输出.
数据类型:功能手柄
|细胞
选项
——培训选项TrainingOptionsSGDM
|培训选项RMSPROP
|TrainingOptionsADAM
培训选择,作为TrainingOptionsSGDM
,培训选项RMSPROP
,或TrainingOptionsADAM
对象。要训练神经网络,使用训练选项作为输入参数trainNetwork
函数。
如果solverName
='sgdm'
,'rmsprop'
,或'亚当'
,则训练选项将作为TrainingOptionsSGDM
,培训选项RMSPROP
,或TrainingOptionsADAM
对象,分别。
的训练选项属性TrainingOptionsSGDM
,TrainingOptionsADAM
,培训选项RMSPROP
直接对象。例如,在使用trainingOptions
功能,可以编辑MiniBatchSize
直接财产:
选择= trainingOptions(个);选项。MiniBatchSize = 64;
对于大多数深度学习任务,您可以使用备用网络并将其调整到您自己的数据。出于一个示例,展示了如何使用传输学习培育卷积神经网络以对新一组图像进行分类,请参阅训练深度学习网络对新图像进行分类.或者,您可以使用从头开始创建和培训网络layerGraph
的对象trainNetwork
和trainingOptions
功能。
如果trainingOptions
函数不提供任务所需的训练选项,则可以使用自动区分创建自定义训练循环。想要了解更多,请看为定制培训循环定义深度学习网络.
对于卷积层和全连通层,权值和偏差的初始化由WeightsInitializer
和BiasInitializer
属性的层,分别。有关如何更改权重和偏差的初始化的示例,请参见在卷积层中指定初始权重和偏差和在完全连接层中指定初始权重和偏差.
标准梯度下降算法更新网络参数(权值和偏差),使损失函数最小化,方法是在每次迭代时,在损失的负梯度方向上采取小步骤,
在哪里 为迭代数, 为学习速率, 是参数向量,并且 为损失函数。在标准梯度下降算法中,损失函数的梯度, ,使用整个训练集进行评估,而标准梯度下降算法一次使用整个数据集。
相反,在每次迭代中随机梯度下降算法评估梯度,并使用训练数据的子集更新参数。在每次迭代中使用一个称为迷你批处理的不同子集。使用小批量的训练算法在整个训练集上的完整通过为1时代.随机梯度下降是随机的,因为使用迷你批处理计算的参数更新是使用完整数据集来导致的参数更新的噪声估计。您可以使用该方法指定迷你批量大小和时代的最大数量“MiniBatchSize”
和“MaxEpochs”
名称-值对参数。
随机梯度下降算法可以沿最陡下降路径向最优方向振荡。在参数更新中添加动量项是减少这种振荡的一种方法[2].随机梯度动量下降(SGDM)更新为
在哪里
确定上一个渐变步骤对当前迭代的贡献。可以使用“动量”
名称-值对的论点。使用随机梯度下降与动量算法训练神经网络,指定solverName
作为'sgdm'
.要指定学习率α的初始值,使用“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”
名称-值对参数。亚当用移动平均线来更新网络参数
如果许多迭代中的梯度是相似的,那么使用梯度的移动平均值可以使参数更新在某个方向上获得动量。如果梯度包含大部分的噪声,那么梯度的移动平均会变得更小,因此参数更新也会变得更小。您可以指定ɛ通过使用‘ε’
名称-值对参数。默认值通常效果良好,但对于某些问题,大到1的值效果更好。要使用Adam训练神经网络,请指定solverName
作为'亚当'
.完整的亚当更新还包括一个机制,以纠正在训练开始时出现的偏差。有关更多信息,请参见[4].
指定学习速率α用于所有优化算法使用“InitialLearnRate”
名称-值对的论点。对于不同优化算法,学习率的影响是不同的,因此最佳学习率通常也不同。您还可以指定不同层次和参数的学习率。有关更多信息,请参见在卷积和全连接层中设置参数.
如果梯度呈指数级增长,那么训练是不稳定的,可能在几次迭代中发散。这种“梯度爆炸”是由训练损失来表示的南
或Inf
。梯度剪裁通过在较高学习率和存在异常值的情况下稳定训练,有助于防止梯度爆炸[3].梯度裁剪可以更快地训练网络,而且通常不会影响学习任务的准确性。
有两种类型的渐变剪辑。
基于norm的梯度裁剪基于阈值缩放梯度,而不改变梯度的方向。这个“l2norm”
和“global-l2norm”
价值观GradientThresholdMethod
是基于范数的梯度裁剪方法。
基于值的梯度裁剪裁剪任何大于阈值的偏导数,这会导致梯度任意改变方向。基于值的梯度裁剪可能具有不可预测的行为,但足够小的变化不会导致网络发散。这个“绝对值”
的价值GradientThresholdMethod
是一种基于值的梯度裁剪方法。
有关示例,请参见基于深度学习的时间序列预测和基于深度学习的序列到序列分类.
向损失函数中添加权重的正则化项 是否有一种方法可以减少过度拟合[1],[2].正则化项也称为重量衰减.带正则项的损失函数为
在哪里 是权重向量, 是正则化因子(系数)和正则化函数 是
注意,这些偏见并不是规格化的[2].您可以指定正则化因子
通过使用“L2Regularization”
名称-值对的论点。您还可以为不同的图层和参数指定不同的正则化因子。有关更多信息,请参见在卷积和全连接层中设置参数.
该软件用于网络训练的损失函数包含正则化项。但是,在训练过程中,命令窗口和训练进度图中显示的损失值仅为数据上的损失,不包括正则项。
“ValidationPatience”
培训选项默认为Inf
R2018b中行为改变
从R2018b开始“ValidationPatience”
培训选项是Inf
,这意味着通过验证自动停止已关闭。此行为阻止训练在充分学习数据之前停止。
在以前的版本中,默认值是5.
.要重现这种行为,请设置“ValidationPatience”
选项5.
.
R2018b中行为改变
从R2018b开始,保存检查点网络时,软件会分配以开头的文件名net_checkpoint_
.在以前的版本中,软件分配的文件名以convnet_checkpoint_
.
如果您有保存和加载检查点网络的代码,那么请更新代码以使用新名称加载文件。
[1] 主教,C.M。模式识别和机器学习. 斯普林格,纽约,纽约,2006年。
[2]墨菲,K .P。机器学习:概率视角.麻省理工学院出版社,剑桥,马萨诸塞州,2012年。
帕斯卡努,R., T. Mikolov, Y. Bengio。“关于训练递归神经网络的困难”。第30届国际机器学习会议论文集第28卷(3),2013年,第1310-1318页。
[4]金玛,迪德里克和吉米·巴。"亚当:随机优化的方法"ARXIV预印亚克日期:1412.6980(2014).
有一个对应于MATLAB的代码:
ejecute el comandoinsuciéndoloen la Ventana de comandos de matlab。los navegadores网站没有adminiten comandos de matlab。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。