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后的值。
- 教程样例: