主要内容

trainingOptions

训练深度学习神经网络的选项

描述

例子

选项= trainingOptions (solverName返回指定的优化器的训练选项solverName.方法的输入参数使用训练选项来训练网络trainNetwork函数。

例子

选项= trainingOptions (solverName名称=值返回由一个或多个名称-值参数指定的附加选项的训练选项。

例子

全部折叠

创建一组使用随机梯度下降和动量训练网络的选项。每5个周期将学习率降低0.2倍。将训练的最大周期数设置为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.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: " CheckpointFrequency: 1 CheckpointFrequencyUnit:'epoch' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: 'last-iteration'

这个例子展示了如何监控深度学习网络的训练过程。

当您为深度学习训练网络时,监视训练进度通常是有用的。通过在训练期间绘制各种度量,您可以了解训练是如何进行的。例如,您可以确定网络准确性是否在提高以及提高的速度有多快,以及网络是否开始过度拟合训练数据。

方法训练的网络的训练进度trainNetwork函数。对于使用自定义训练循环训练的网络,使用trainingProgressMonitor在训练期间反对绘图指标。有关更多信息,请参见监控自定义训练循环的进度

当你设置情节培训选项“训练进步”trainingOptions开始网络培训,trainNetwork在每次迭代中创建一个数字并显示训练指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions,则该图显示了每次的验证指标trainNetwork验证网络。图示如下:

  • 训练精度-每个小批次的分类精度。

  • 平滑的训练精度-平滑训练精度,通过对训练精度应用平滑算法获得。它比非平滑精度噪音小,更容易发现趋势。

  • 验证准确性-整个验证集的分类精度(使用trainingOptions).

  • 培训损失平滑培训损失,确认损失-每个小批次、其平滑版本和验证集上的损失分别为。如果网络的最后一层是classificationLayer,则损失函数为交叉熵损失。有关用于分类和回归问题的损失函数的更多信息,请参见输出层

对于回归网络,图中绘制的是均方根误差(RMSE)而不是精度。

这个数字标记了每次训练时代使用阴影背景。一个历是对整个数据集的一次完整的传递。

在训练过程中,您可以通过点击右上角的停止按钮,停止训练并返回当前网络状态。例如,当网络的准确率达到一个平台期,并且很明显准确率不再提高时,您可能想要停止训练。点击停止按钮后,可能需要一段时间才能完成训练。一旦训练完成,trainNetwork返回经过训练的网络。

培训结束后,查看结果显示最终验证的准确性和培训结束的原因。如果OutputNetwork训练方法是“最后一次迭代的”(默认),最终的度量与最后的训练迭代相对应。如果OutputNetwork训练方法是“best-validation-loss”,最终的度量与验证损失最小的迭代相对应。计算最终验证指标的迭代被标记最后的情节。

如果您的网络包含批处理规范化层,那么最终验证指标可能与训练期间评估的验证指标不同。这是因为用于批归一化的均值和方差统计数据在训练完成后可能会有所不同。例如,如果BatchNormalizationStatisics训练方法是“人口”,训练结束后,软件再次遍历训练数据,并使用得到的均值和方差,完成批量归一化统计。如果BatchNormalizationStatisics训练方法是“移动”,然后该软件在训练过程中使用运行估计值近似统计数据,并使用统计数据的最新值。

在右侧页面可以查看培训时间和设置信息。要了解更多关于培训选项的信息,请参见参数设置与卷积神经网络训练

单击,保存训练进度图出口培训策划在训练窗口。您可以将绘图保存为PNG、JPEG、TIFF或PDF文件。您还可以使用坐标轴工具栏保存损失、精度和均方根误差的单个图。

在训练中规划训练进度

训练网络,并在训练中绘制训练进度图。

加载训练数据,其中包含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]) convolution2dLayer(3,8,Padding= .“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,16,Padding= .“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,32,Padding= .“相同”) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];

指定网络培训选项。要在训练期间定期验证网络,请指定验证数据。选择ValidationFrequency值,以便网络大约每一个纪元验证一次。若要在训练过程中绘制训练进度,请设置情节培训选项“训练进步”

选择= trainingOptions (“个”...MaxEpochs = 8,...ValidationData = {XValidation, YValidation},...ValidationFrequency = 30,...Verbose = false,...情节=“训练进步”);

培训网络。

网= trainNetwork (XTrain、YTrain层,选择);

{

输入参数

全部折叠

训练网络的求解器,指定为以下之一:

  • “个”-使用随机梯度下降动量(SGDM)优化器。方法可以指定动量值动力培训的选择。

  • “rmsprop”-使用RMSProp优化器。方法可以指定平方梯度移动平均的衰减率SquaredGradientDecayFactor培训的选择。

  • “亚当”-使用亚当优化器。方法可以指定梯度和梯度移动平均数的衰减率和平方梯度移动平均数GradientDecayFactorSquaredGradientDecayFactor训练选项,分别。

有关不同求解器的更多信息,请参见随机梯度下降法

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:InitialLearnRate = 0.03, L2Regularization = 0.0005, LearnRateSchedule =“分段”将初始学习率指定为0.03l2正则化因子为0.0005,并通过与某一因子相乘,指示软件每给定代数降低学习率。

情节和显示

全部折叠

在网络训练期间显示的图,指定为以下之一:

  • “没有”-训练时不要展示情节。

  • “训练进步”-规划训练进度。图中显示了小批量损失和准确性,验证损失和准确性,以及关于训练进度的附加信息。剧情有一个停止按钮在右上角。点击按钮,停止训练,返回当前网络状态。您可以通过单击将训练图保存为图像或PDF格式出口培训策划.有关训练进度图的更多信息,请参见监控深度学习培训进度

在命令窗口中显示训练进度信息,指定为1(真正的)或0(假)。

详细输出显示以下信息:

网络的分类

描述
时代 时代的数字。一个历对应于数据的完整遍历。
迭代 迭代数。迭代对应于一个小批处理。
时间 时间以小时、分钟和秒为单位流逝。
Mini-batch准确性 小批量分类精度。
验证准确性 验证数据的分类精度。如果不指定验证数据,则函数不显示此字段。
Mini-batch损失 小批量上的损耗。如果输出层是ClassificationOutputLayer对象,则损失为具有互斥类的多类分类问题的交叉熵损失。
确认损失 验证数据上的损失。如果输出层是ClassificationOutputLayer对象,则损失为具有互斥类的多类分类问题的交叉熵损失。如果不指定验证数据,则函数不显示此字段。
基础学习速率 基础学习速率。软件将各层的学习速率因子乘以这个值。

回归网络

描述
时代 时代的数字。一个历对应于数据的完整遍历。
迭代 迭代数。迭代对应于一个小批处理。
时间 时间以小时、分钟和秒为单位流逝。
Mini-batch RMSE 小批处理上的均方根误差(RMSE)。
验证RMSE 验证数据上的RMSE。如果不指定验证数据,则软件不显示此字段。
Mini-batch损失 小批量上的损耗。如果输出层是RegressionOutputLayer对象,则损失为半均方误差。
确认损失 验证数据上的损失。如果输出层是RegressionOutputLayer对象,则损失为半均方误差。如果不指定验证数据,则软件不显示此字段。
基础学习速率 基础学习速率。软件将各层的学习速率因子乘以这个值。

当训练停止时,详细输出将显示停止的原因。

方法指定验证数据ValidationData培训的选择。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

详细打印的频率,即从打印到命令窗口之间的迭代次数,指定为正整数。此选项仅在详细的训练方法是1(真正的)。

如果你在训练中验证网络,那么trainNetwork还在每次进行验证时打印到命令窗口。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

Mini-Batch选项

全部折叠

用于训练的最大课时数,指定为正整数。

迭代是梯度下降算法中使用小批最小化损失函数所采取的步骤。一个历是训练算法在整个训练集上的全部经过。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于每个训练迭代的小批的大小,指定为正整数。小批处理是训练集的一个子集,用于评估损失函数的梯度和更新权重。

如果小批次大小不能平均分配训练样本的数量,那么trainNetwork丢弃不适合每个历的最终完整小批处理的训练数据。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

数据变换选项,指定为以下之一:

  • “一次”—训练前对训练和验证数据进行一次洗牌。

  • “永远”—不要打乱数据。

  • “every-epoch”-在每个训练历之前打乱训练数据,在每个网络验证之前打乱验证数据。如果小批次大小不能平均分配训练样本的数量,那么trainNetwork丢弃不适合每个历的最终完整小批处理的训练数据。要避免在每个时代丢弃相同的数据,请设置洗牌培训选项“every-epoch”

验证

全部折叠

培训期间用于验证的数据,指定为[]、数据存储、表或包含验证预测器和响应的单元格数组。

控件支持的相同格式可以指定验证预测器和响应trainNetwork函数。可以将验证数据指定为数据存储库、表或单元格数组}{预测,反应,在那里预测包含验证预测器和反应包含验证响应。

有关更多信息,请参见图片序列,特性的输入参数trainNetwork函数。

在培训期间,trainNetwork计算验证数据的验证精度和验证损失。方法指定验证频率ValidationFrequency培训的选择。您还可以使用验证数据在验证损失停止减少时自动停止训练。若要启用自动验证停止,请使用ValidationPatience培训的选择。

如果您的网络在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证精度可能高于训练(小批处理)精度。

验证数据根据洗牌培训的选择。如果洗牌“every-epoch”,然后在每次网络验证之前对验证数据进行洗牌。

如果ValidationData[],则软件在训练过程中不验证网络。

以迭代次数表示的网络验证频率,指定为正整数。

ValidationFrequency值是验证度量评估之间的迭代次数。方法指定验证数据ValidationData培训的选择。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

验证停止网络训练的耐心,指定为正整数或

ValidationPatience指定在网络训练停止之前,验证集上的损失可以大于或等于之前最小损失的次数。如果ValidationPatience,则验证损失的值不会导致训练提前停止。

返回的网络取决于OutputNetwork培训的选择。若要返回验证损耗最低的网络,请设置OutputNetwork培训选项“best-validation-loss”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

网络在培训完成时返回,指定为以下之一:

  • 最后一次迭代的-返回上次训练迭代对应的网络。

  • “best-validation-loss”-返回验证损失最小的训练迭代对应的网络。要使用此选项,必须指定ValidationData培训的选择。

解算器选项

全部折叠

用于训练的初始学习率,指定为正标量。

默认值为0.01“个”解算器和0.001“rmsprop”“亚当”解决者。

如果学习率太低,那么训练就会花费很长时间。如果学习率太高,那么训练可能会达到次优结果或发散。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

在训练过程中降低学习速率的选项,具体如下:

  • “没有”-在整个训练过程中,学习率保持不变。

  • “分段”-每隔一定的课时数,软件通过乘以一定的因子更新学习率。使用LearnRateDropFactor训练选项,以指定该因子的值。使用LearnRateDropPeriod训练选项,以指定乘法之间的代数。

降低学习率的周期数,用正整数指定。此选项仅在LearnRateSchedule训练方法是“分段”

该软件将全局学习率与下降因子相乘,每次指定的时间通过。方法指定丢弃因子LearnRateDropFactor培训的选择。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

删除学习率的因子,指定为标量01.此选项仅在LearnRateSchedule训练方法是“分段”

LearnRateDropFactor是一个乘数因子,用于每次经过一定时间数时的学习率。方法指定时代数LearnRateDropPeriod培训的选择。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

L因素2正则化(权值衰减),指定为非负标量。有关更多信息,请参见L2正规化

您可以为L指定一个乘数2具有可学习参数的网络层的正则化。有关更多信息,请参见在卷积和全连通层中设置参数

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

上一迭代的参数更新步骤对带有动量的随机梯度下降的当前迭代的贡献,指定为标量01

的值0表示上一步没有贡献,而值为1表示上一步的最大贡献。默认值适用于大多数任务。

指定动力训练选项,solverName必须“个”

有关更多信息,请参见带动量的随机梯度下降

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

亚当解算器的梯度移动平均衰减率,指定为小于的非负标量1.梯度衰减率表示为β1亚当部分。

指定GradientDecayFactor训练选项,solverName必须“亚当”

默认值适用于大多数任务。

有关更多信息,请参见亚当

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

Adam和RMSProp解算器的平方梯度移动平均的衰减率,指定为小于的非负标量1.梯度衰减率的平方表示为β2[4]

指定SquaredGradientDecayFactor训练选项,solverName必须“亚当”“rmsprop”

衰减率的典型值为0.90.99,0.999的平均长度10One hundred.,1000参数更新,分别。

默认值为0.999亚当解算器。默认值为0.9为RMSProp求解器。

有关更多信息,请参见亚当RMSProp

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

Adam和RMSProp求解器的分母偏移量,指定为正标量。

求解器将偏移量添加到网络参数更新中的分母上,以避免除零。默认值适用于大多数任务。

指定ε训练选项,solverName必须“亚当”“rmsprop”

有关更多信息,请参见亚当RMSProp

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

选项重置输入层归一化,指定为以下之一:

  • 1(true) -重置输入层归一化统计数据,并在训练时重新计算。

  • 0(false) -在训练时计算归一化统计值,当它们为空时。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

在批处理归一化层中计算统计信息的模式,指定为以下之一:

  • “人口”-使用人口统计数据。训练结束后,软件通过再次遍历训练数据来完成统计,并使用得到的平均值和方差。

  • “移动”-使用更新步骤给出的运行估计值近似训练期间的统计数据

    μ λ μ μ + 1 λ μ μ σ 2 λ σ 2 σ 2 + (1 - λ σ 2 σ 2

    在哪里 μ σ 2 分别表示更新后的平均值和方差, λ μ λ σ 2 分别为衰减的平均值和方差值, μ σ 2 分别表示层输入的平均值和方差,和 μ σ 2 分别表示移动均值和方差值的最新值。经过训练后,软件使用最新的移动均值和方差统计值。该选项只支持CPU和单个GPU训练。

梯度剪裁

全部折叠

梯度阈值,指定为或者一个正的标量。的值GradientThreshold,然后根据裁剪梯度GradientThresholdMethod培训的选择。

有关更多信息,请参见梯度剪裁

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

梯度阈值方法,用于裁剪超过梯度阈值的梯度值,指定为以下之一:

  • “l2norm”-如果L2可学习参数的梯度范数大于GradientThreshold,然后缩放梯度,使L2规范=GradientThreshold

  • “global-l2norm”—如果全局L2规范,l,大于GradientThreshold,然后将所有梯度缩放为GradientThreshold /l.全球L2Norm考虑了所有可学习的参数。

  • “绝对值”-如果可学习参数的梯度中个别偏导数的绝对值大于GradientThreshold,然后缩放偏导数得到模等于GradientThreshold保留偏导数的符号。

有关更多信息,请参见梯度剪裁

序列的选择

全部折叠

填充、截断或分割输入序列的选项,指定为以下之一:

  • “最长”-每个小批中的衬垫序列与最长序列的长度相同。这个选项不会丢弃任何数据,尽管填充会给网络带来噪音。

  • “最短”-截断每个小批中的序列,使其长度与最短的序列相同。此选项确保不添加填充,但代价是丢弃数据。

  • 正整数——对于每个小批,将序列填充为小批中最长序列的长度,然后将序列分割为指定长度的更小的序列。如果发生分裂,那么软件会创建额外的小批量。如果指定的序列长度没有平均分配数据的序列长度,那么包含这些序列末端的小批次的长度小于指定的序列长度。如果完整序列不适合内存,则使用此选项。或者,尝试减少每个小批处理的序列数量MiniBatchSize选项设置为较低的值。

要了解关于填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|字符|字符串

填充或截断的方向,指定为下列之一:

  • “正确”-在右侧填充或截断序列。序列开始在同一时间步骤和软件截断或添加填充序列的结尾。

  • “左”-在左侧填充或截断序列。该软件截断或添加填充序列的开始,以使序列结束在同一时间步骤。

因为循环层每次处理一个时间步的序列数据,当循环层OutputMode属性是“最后一次”,在最后的时间步长的任何填充都会对图层输出产生负面影响。若要在左侧填充或截断序列数据,请设置SequencePaddingDirection选项“左”

对于序列到序列网络(当OutputMode属性是“序列”对于每个循环层),第一个时间步骤中的任何填充都可能对早期时间步骤的预测产生负面影响。若要在右侧填充或截断序列数据,请设置SequencePaddingDirection选项“正确”

要了解关于填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割

用来填充输入序列的值,指定为标量。

该选项仅在以下情况下有效SequenceLength“最长”或者一个正整数。不垫序列用因为这样做会在整个网络中传播错误。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

硬件选项

全部折叠

用于培训网络的硬件资源,指定为以下之一:

  • “汽车”—如果有图形处理器,请使用。否则,请使用CPU。

  • “cpu”—使用CPU。

  • “图形”—使用GPU。

  • “multi-gpu”—在一台机器上使用多个gpu,根据默认集群配置文件使用本地并行池。如果当前没有并行池,软件启动一个并行池,池大小等于可用gpu的数量。

  • “平行”—根据默认集群配置文件使用本地或远程并行池。如果当前没有并行池,软件将使用默认的集群配置文件启动一个并行池。如果池可以访问GPU,那么只有具有唯一GPU的工作者执行训练计算。如果池中没有gpu,那么将对所有可用的CPU工作人员进行培训。

有关何时使用不同执行环境的更多信息,请参见在并行、gpu和云上扩展深度学习

“图形”“multi-gpu”,“平行”选项需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱)如果您选择了其中一个选项,而并行计算工具箱或合适的GPU不可用,那么软件将返回一个错误。

为了在并行训练中看到表现的改善,试着扩大MiniBatchSizeInitialLearnRate根据gpu的数量选择训练选项。

“multi-gpu”“平行”选项不支持包含带有状态参数的自定义层或在训练时有状态的内置层的网络。例如:

gpu或cpu之间的并行工作负载分配,指定为以下之一:

  • 标量的01-每台机器上用于网络训练计算的工人的比例。如果使用启用了后台调度的小批数据存储中的数据来训练网络,那么其余的worker将在后台获取和预处理数据。

  • 正整数-每台机器上用于网络训练计算的工作者数量。如果使用启用了后台调度的小批数据存储中的数据来训练网络,那么其余的worker将在后台获取和预处理数据。

  • 数字向量——并行池中每个工作者的网络训练负载。为一个向量W、工人获得分数W(我)/ (W)和工作的数量(每个小批次的样例数量)。如果使用启用了后台调度的小批数据存储中的数据来训练网络,那么可以分配一个工作者负载为0来使用该工作者在后台获取数据。指定的向量必须包含并行池中的每个工作者的一个值。

如果并行池可以访问GPU,那么没有唯一GPU的工作者永远不会被用于训练计算。带有GPU的池的默认设置是使用具有唯一GPU的所有worker进行训练计算,其余的worker用于后台调度。如果该池不能访问gpu和用于培训的cpu,则默认为每台机器使用一个worker进行后台数据调度。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

标志,使后台调度(异步预取队列)能够从数据存储中读取训练数据,指定为0(虚假的)或1(真正的)。后台调度需要“并行计算工具箱”。

DispatchInBackground仅支持可分区的数据存储。有关更多信息,请参见使用数据存储进行并行训练和后台调度

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

检查点

全部折叠

保存检查点网络的路径,指定为字符向量或字符串标量。

  • 如果不指定路径(即使用默认路径),则使用默认路径""),那么该软件就不会保存任何检查点网络。

  • 如果您指定了一个路径,那么trainNetwork将检查点网络保存到此路径,并为每个网络分配唯一的名称。然后,您可以加载任何检查点网络,并从该网络恢复训练。

    如果该文件夹不存在,则必须在指定保存检查点网络的路径之前先创建它。如果指定的路径不存在,则trainingOptions返回一个错误。

CheckpointFrequencyCheckpointFrequencyUnit选项指定保存检查点网络的频率。

有关保存网络检查点的更多信息,请参见保存检查点网络并恢复训练

数据类型:字符|字符串

保存检查点网络的频率,指定为正整数。

如果CheckpointFrequencyUnit“时代”,那么该软件保存检查点网络每CheckpointFrequency时代的发展。

如果CheckpointFrequencyUnit“迭代”,那么该软件保存检查点网络每CheckpointFrequency迭代。

此选项仅在以下情况下有效CheckpointPath非空的。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

检查点频率单位,指定为“时代”“迭代”

如果CheckpointFrequencyUnit“时代”,那么该软件保存检查点网络每CheckpointFrequency时代的发展。

如果CheckpointFrequencyUnit“迭代”,那么该软件保存检查点网络每CheckpointFrequency迭代。

此选项仅在以下情况下有效CheckpointPath非空的。

输出要在训练期间调用的函数,指定为函数句柄或函数句柄的单元格数组。trainNetwork在训练开始前、每次迭代之后和训练结束后分别调用指定的函数一次。trainNetwork传递一个包含以下字段信息的结构:

描述
时代 当前时代数量
迭代 当前迭代次数
TimeSinceStart 从训练开始算起,时间以秒计
TrainingLoss 当前mini-batch损失
ValidationLoss 验证数据上的损失
BaseLearnRate 当前基础学习率
TrainingAccuracy 当前小批的准确性(分类网络)
TrainingRMSE 当前小批(回归网络)上的均方根误差
ValidationAccuracy 验证数据的准确性(分类网络)
ValidationRMSE 验证数据上的均方根误差(回归网络)
状态 当前训练状态,可能值为“开始”“迭代”,或“完成”

如果某个字段不是计算出来的或与对输出函数的某个调用无关,则该字段包含一个空数组。

您可以使用输出函数来显示或绘制进度信息,或停止训练。要尽早停止训练,请让输出函数返回1(真正的)。如果任何输出函数返回1(正确),然后训练结束和trainNetwork返回最新的网络。有关如何使用输出函数的示例,请参见深度学习网络训练中的自定义输出

数据类型:function_handle|细胞

输出参数

全部折叠

培训选项,返回为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象。训练神经网络时,使用训练选项作为参数的输入trainNetwork函数。

如果solverName“个”“rmsprop”,或“亚当”,则训练选项返回为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象,分别。

的训练选项属性TrainingOptionsSGDMTrainingOptionsADAM,TrainingOptionsRMSProp直接对象。方法后更改小批处理大小trainingOptions函数,您可以编辑MiniBatchSize房地产直接:

选择= trainingOptions(个);选项。MiniBatchSize = 64;

提示

算法

全部折叠

初始权重和偏差

对于卷积和全连通层,权值和偏差的初始化由WeightsInitializerBiasInitializer层的属性,分别。有关显示如何更改权重和偏差的初始化的示例,请参见在卷积层中指定初始权值和偏差在全连通层中指定初始权值和偏差

随机梯度下降法

标准梯度下降算法更新网络参数(权重和偏差),通过在每次迭代中沿损失的负梯度方向采取小步骤来最小化损失函数,

θ + 1 θ α E θ

在哪里 为迭代次数, α > 0 是学习率, θ 是参数向量,和 E θ 是损失函数。在标准梯度下降算法中,损失函数的梯度, E θ ,使用整个训练集进行评估,标准梯度下降算法一次使用整个数据集。

相比之下,在每次迭代中随机梯度下降算法使用训练数据的子集对梯度进行评估并更新参数。在每次迭代中使用一个不同的子集,称为小批处理。训练算法在使用小批量的整个训练集上的通过率为1时代.随机梯度下降之所以是随机的,是因为使用小批计算的参数更新是使用完整数据集产生的参数更新的噪声估计。方法可以指定小批处理大小和最大epoch数MiniBatchSizeMaxEpochs训练选项,分别。

带动量的随机梯度下降

随机梯度下降算法可以沿着最陡下降到最优的路径振荡。在参数更新中添加动量项是减少这种振荡的一种方法[2].具有动量的随机梯度下降(SGDM)更新为

θ + 1 θ α E θ + γ θ θ 1

在哪里 γ 确定前一个渐变步骤对当前迭代的贡献。方法指定此值动力培训的选择。使用随机梯度下降动量算法训练神经网络,指定“个”的第一个输入参数trainingOptions.要指定学习速率α的初始值,可以使用InitialLearnRate培训的选择。您还可以为不同的层和参数指定不同的学习率。有关更多信息,请参见在卷积和全连通层中设置参数

RMSProp

具有动量的随机梯度下降对所有参数使用单一学习率。其他优化算法通过使用随参数而不同的学习率来改善网络训练,并可以自动适应被优化的损失函数。RMSProp(均方根传播)就是这样一种算法。它保持了参数梯度的元素平方的移动平均值,

v β 2 v 1 + 1 β 2 E θ 2

β2是移动平均线的衰减率。衰减率的常见值为0.9、0.99和0.999。梯度平方对应的平均长度等于1 /(1 -β2,即分别进行10、100和1000次参数更新。您可以指定β2通过使用SquaredGradientDecayFactor培训选项。RMSProp算法使用这个移动平均来分别规范化每个参数的更新,

θ + 1 θ α E θ v + ϵ

其中按元素执行除法。使用RMSProp有效地降低了梯度大的参数的学习率,提高了梯度小的参数的学习率。ɛ为避免除零而加的一个小常数。您可以指定ɛ通过使用ε训练选项,但默认值通常工作良好。要使用RMSProp训练神经网络,请指定“rmsprop”作为第一个输入trainingOptions

亚当

亚当(来自自适应估计时刻[4]使用一个类似于RMSProp的参数更新,但是增加了一个动量项。它保持了参数梯度及其平方值的元素移动平均值,

β 1 1 + 1 β 1 E θ

v β 2 v 1 + 1 β 2 E θ 2

您可以指定β1β2衰减率使用GradientDecayFactorSquaredGradientDecayFactor训练选项,分别。亚当使用移动平均线来更新网络参数

θ + 1 θ α l v l + ϵ

如果多次迭代的梯度是相似的,那么使用梯度的移动平均可以使参数更新在某个方向上获得动量。如果梯度包含大部分噪声,那么梯度的移动平均值会变小,因此参数更新也会变小。您可以指定ɛ通过使用ε培训的选择。默认值通常可以很好地工作,但对于某些问题,大到1的值更好。要用亚当训练神经网络,指定“亚当”作为第一个输入trainingOptions.完整的亚当更新还包括一个机制,以纠正在训练开始时出现的偏见。有关更多信息,请参见[4]

指定学习率α的所有优化算法InitialLearnRate培训的选择。不同的优化算法对学习率的影响是不同的,所以最优学习率一般也不同。您还可以根据层和参数指定不同的学习率。有关更多信息,请参见在卷积和全连通层中设置参数

梯度剪裁

如果梯度以指数级增长,那么训练是不稳定的,可以在几次迭代中发散。这种“梯度爆炸”是由训练损失表示的.梯度裁剪通过在较高的学习率和异常值存在的情况下稳定训练,有助于防止梯度爆炸[3].梯度裁剪使网络训练得更快,而且通常不影响学习任务的准确性。

有两种类型的梯度裁剪。

  • 基于范数的梯度裁剪基于阈值缩放梯度,并且不改变梯度的方向。的“l2norm”“global-l2norm”的值GradientThresholdMethod是基于范数的梯度裁剪方法。

  • 基于值的梯度裁剪截取任何大于阈值的偏导数,这可能导致梯度任意改变方向。基于值的梯度裁剪可能具有不可预测的行为,但足够小的变化不会导致网络发散。的“绝对值”的价值GradientThresholdMethod是一种基于值的渐变裁剪方法。

l2正则化

为损失函数的权重添加正则化项 E θ 减少过拟合是一种方法吗[1][2].正则化项也称为正则化项体重衰变.具有正则化项的损失函数为

E R θ E θ + λ Ω w

在哪里 w 是权向量, λ 是正则化因子(系数),和正则化函数 Ω w

Ω w 1 2 w T w

注意,这些偏差并不是正则化的[2].您可以指定正则化因子 λ 通过使用L2Regularization培训的选择。您还可以为不同的层和参数指定不同的正则化因子。有关更多信息,请参见在卷积和全连通层中设置参数

软件用于网络训练的损失函数包含正则化项。然而,在训练过程中,命令窗口和训练进度图中显示的损失值只是数据上的损失,不包括正则化项。

参考文献

[1]主教,c.m。模式识别与机器学习.施普林格,纽约,纽约,2006年。

[2]墨菲,K. P。机器学习:一个概率的视角.麻省理工学院出版社,剑桥,马萨诸塞州,2012。

帕斯卡努,R., T.米科洛夫,Y.本吉奥。《关于循环神经网络训练的难点》。第30届机器学习国际会议论文集.Vol. 28(3), 2013, pp. 1310-1318。

金玛,迪耶德里克,吉米巴。"亚当:随机优化的一种方法"arXiv预印本arXiv: 1412.6980(2014)。

版本历史

介绍了R2016a

全部展开

Baidu
map