主要内容

TrainingOptionsRMSProp

RMSProp优化器的训练选项

描述

RMSProp(均方根传播)优化器的训练选项,包括学习率信息,L2正则化因子和小批量大小。

创建

创建一个TrainingOptionsRMSProp对象使用trainingOptions并指定“rmsprop”作为第一个输入参数。

属性

全部展开

图和显示

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

  • “没有”—训练过程中严禁展示情节。

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

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

详细输出显示如下信息:

网络的分类

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

回归网络

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

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

要指定验证数据,请使用ValidationData培训的选择。

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

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

如果你在训练期间验证了网络,那么trainNetwork还在每次验证发生时打印到命令窗口。

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

Mini-Batch选项

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

迭代是梯度下降算法中使用小批最小化损失函数的一个步骤。epoch是训练算法在整个训练集上的完整传递。

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

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

如果小批量大小没有平均分配训练样本的数量,则trainNetwork丢弃不适合每个epoch的最后完整小批的训练数据。

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

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

  • “一次”-在培训前对培训和验证数据进行一次洗牌。

  • “永远”—禁止数据shuffle。

  • “every-epoch”-在每个训练纪元之前洗牌训练数据,在每个网络验证之前洗牌验证数据。如果小批量大小没有平均分配训练样本的数量,则trainNetwork丢弃不适合每个epoch的最后完整小批的训练数据。为避免在每个纪元丢弃相同的数据,请设置洗牌培训选项“every-epoch”

验证

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

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

有关更多信息,请参见图片序列,特性的输入参数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培训的选择。

解算器选项

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

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

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

此属性是只读的。

学习率计划的设置,以结构形式指定。LearnRateScheduleSettings有场地方法,指定调整学习率的方法类型。可能的方法是:

  • “没有”-在整个训练过程中,学习率是恒定的。

  • “分段”—在训练过程中,学习率会周期性下降。

如果方法“分段”,然后LearnRateScheduleSettings包含两个字段:

  • DropRateFactor-在训练期间学习率下降的乘法因子

  • DropPeriod-在训练过程中,调整到学习率之间所经过的epoch数

使用指定学习进度速率的设置trainingOptions

数据类型:结构体

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

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

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

RMSProp求解器的平方梯度移动平均的衰减率,指定为小于的非负标量1

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

有关更多信息,请参见RMSProp

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

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和单G万博1manbetxPU训练。

梯度剪裁

梯度阈值,指定为或者一个正标量。的值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 worker进行培训。

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

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

要想在并行训练时看到性能的改善,请尝试扩大训练的规模MiniBatchSize而且InitialLearnRate训练选项的gpu数量。

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

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

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

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

  • 数字矢量-网络对并行池中每个工作人员的训练负荷。对于一个向量W、工人得到一个分数W(我)/ (W)和工作的数量(每小批样品的数量)。如果您使用启用后台调度的迷你批处理数据存储中的数据来训练网络,那么您可以分配一个0的工作者负载来使用该工作者在后台获取数据。指定的向量必须包含并行池中的每个worker的一个值。

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

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

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

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

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

检查点

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

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

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

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

CheckpointFrequency而且CheckpointFrequencyUnit选项指定保存检查点网络的频率。

有关保存网络检查点的详细信息,请参见保存检查点网络并恢复培训

数据类型:字符|字符串

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

如果CheckpointFrequencyUnit“时代”,然后软件保存每个检查点网络CheckpointFrequency时代的发展。

如果CheckpointFrequencyUnit“迭代”,然后软件保存每个检查点网络CheckpointFrequency迭代。

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

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

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

如果CheckpointFrequencyUnit“时代”,然后软件保存每个检查点网络CheckpointFrequency时代的发展。

如果CheckpointFrequencyUnit“迭代”,然后软件保存每个检查点网络CheckpointFrequency迭代。

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

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

描述
时代 当前纪元数
迭代 当前迭代次数
TimeSinceStart 时间单位为秒,从训练开始算起
TrainingLoss 电流小批损耗
ValidationLoss 验证数据的损失
BaseLearnRate 当前基本学习率
TrainingAccuracy 当前小批的准确性(分类网络)
TrainingRMSE 当前小批上的RMSE(回归网络)
ValidationAccuracy 验证数据的准确性(分类网络)
ValidationRMSE 验证数据的RMSE(回归网络)
状态 当前训练状态,可能值为“开始”“迭代”,或“完成”

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

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

数据类型:function_handle|细胞

例子

全部折叠

使用RMSProp优化器创建一组用于训练神经网络的选项。将训练的最大epoch数设置为20,并在每次迭代中使用64个观测值的迷你批处理。指定学习率和梯度平方移动平均的衰减率。打开训练进度图。

options = trainingOptions(“rmsprop”...InitialLearnRate = 3的军医,...SquaredGradientDecayFactor = 0.99,...MaxEpochs = 20,...MiniBatchSize = 64,...情节=“训练进步”
options = TrainingOptionsRMSProp与属性:SquaredGradientDecayFactor: 0.9900 Epsilon: 1.0000 -08 InitialLearnRate: 3.0000 -04 learnratesschedule: 'none' LearnRateDropFactor: 0.1000 LearnRateDropPeriod: 10 L2Regularization: 1.0000 -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'

算法

全部展开

版本历史

在R2018a中引入

全部展开