LossScaleOptimizer
类keras.optimizers.LossScaleOptimizer(
inner_optimizer, initial_scale=32768.0, dynamic_growth_steps=2000, **kwargs
)
一个动态缩放损失以防止下溢的优化器。
损失缩放是一种在 float16 被使用时防止中间梯度出现数值下溢的技术。为了防止下溢,损失会乘以一个称为“损失缩放”的特定因子,这会导致中间梯度也按损失缩放进行缩放。最终的梯度会除以(或“反缩放”)损失缩放,以将其恢复到原始值。
LossScaleOptimizer
封装另一个优化器,并对其应用动态损失缩放。此损失缩放会随着时间的推移动态更新,如下所示: - 在任何训练步骤中,如果遇到非有限梯度,损失缩放会减半,并且跳过该训练步骤。 - 如果自上次更新损失缩放以来已经发生了 dynamic_growth_steps
次,并且没有发生非有限梯度,则损失缩放会加倍。
参数
keras.optimizers.Optimizer
实例。dynamic_growth_steps
步骤之后,损失缩放会加倍。False
。如果为 True
,则应用指数移动平均 (EMA)。EMA 包括计算模型的权重指数移动平均值(随着每次训练批次后权重值发生变化),并定期用其移动平均值覆盖权重。use_ema=True
时使用。这是在计算模型权重的 EMA 时使用的动量:new_average = ema_momentum * old_average + (1 - ema_momentum) * current_variable_value
。use_ema=True
时使用。在每次迭代的 ema_overwrite_frequency
步骤后,我们将模型变量覆盖为其移动平均值。如果为 None,则优化器不会在训练过程中覆盖模型变量,您需要在训练结束时通过调用 optimizer.finalize_variable_values()
显式覆盖变量(这将就地更新模型变量)。当使用内置的 fit()
训练循环时,这会在最后一个 epoch 之后自动发生,您无需执行任何操作。None
。如果为浮点数,则在计算梯度之前,损失将乘以缩放因子,并且在更新变量之前,梯度将乘以缩放因子的倒数。这对于防止混合精度训练期间的下溢很有用。或者,keras.optimizers.LossScaleOptimizer
将自动设置损失缩放因子。None
。如果为整数,则不会在每个步骤更新模型和优化器变量;而是每 gradient_accumulation_steps
步更新一次,使用自上次更新以来梯度的平均值。这被称为“梯度累积”。当您的批次大小非常小时,这很有用,以便减少每次更新步骤的梯度噪声。EMA 频率将查看“累积”迭代值(优化器步骤 // gradient_accumulation_steps)。学习率调度将查看“实际”迭代值(优化器步骤)。