mindspore.amp.DynamicLossScaler

class mindspore.amp.DynamicLossScaler(scale_value, scale_factor, scale_window)[源代码]

动态调整损失缩放系数的管理器。

动态损失缩放管理器在保证梯度不溢出的情况下,尝试确定最大的损失缩放值 scale_value。在梯度不溢出的情况下,scale_value 将会每间隔 scale_window 步被扩大 scale_factor 倍,若存在溢出情况,则会将 scale_value 缩小 scale_factor 倍,并重置计数器。

警告

这是一个实验性API,后续可能修改或删除。

参数:
  • scale_value (Union(float, int)) - 初始梯度放大系数。

  • scale_factor (int) - 放大/缩小倍数。

  • scale_window (int) - 无溢出时的连续正常step的最大数量。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> from mindspore import amp, Tensor
>>> import numpy as np
>>> loss_scaler = amp.DynamicLossScaler(scale_value=2**10, scale_factor=2, scale_window=1)
>>> grads = (Tensor(np.array([np.log(-1), 1.0]), mindspore.float16),
...             Tensor(np.array([0.2]), mindspore.float16))
>>> unscaled_grads = loss_scaler.unscale(grads)
>>> grads_finite = amp.all_finite(unscaled_grads)
>>> loss_scaler.adjust(grads_finite)
True
>>> print(loss_scaler.scale_value.asnumpy())
512.0
adjust(grads_finite)[源代码]

根据梯度是否为有效值(无溢出)对 scale_value 进行调整。

参数:
  • grads_finite (Tensor) - bool类型的标量Tensor,表示梯度是否为有效值(无溢出)。

教程样例:
scale(inputs)[源代码]

根据 scale_value 放大inputs。

参数:
  • inputs (Union(Tensor, tuple(Tensor))) - 损失值或梯度。

返回:

Union(Tensor, tuple(Tensor)),scale后的值。

教程样例:
unscale(inputs)[源代码]

对inputs进行unscale,inputs /= scale_value

参数:
  • inputs (Union(Tensor, tuple(Tensor))) - 损失值或梯度。

返回:

Union(Tensor, tuple(Tensor)),unscale后的值。

教程样例: