mindspore.nn.PolynomialDecayLR

class mindspore.nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power, update_decay_steps=False)[源代码]

基于多项式衰减函数计算学习率。

对于当前step,计算学习率的公式为:

\[\begin{split}decayed\_learning\_rate = &(learning\_rate - end\_learning\_rate) *\\ &(1 - tmp\_step / tmp\_decay\_steps)^{power}\\ &+ end\_learning\_rate\end{split}\]

其中,

\[tmp\_step= \min(current\_step, decay\_steps)\]

如果 update_decay_stepstrue ,则每 decay_steps 更新 \(tmp\_decay\_steps\) 的值。公式为:

\[tmp\_decay\_steps = decay\_steps * ceil(current\_step / decay\_steps)\]
参数:
  • learning_rate (float) - 学习率的初始值。

  • end_learning_rate (float) - 学习率的最终值。

  • decay_steps (int) - 进行衰减的step数。

  • power (float) - 多项式的幂,必须大于0。

  • update_decay_steps (bool) - 如果为 True ,则学习率每 decay_steps 次衰减一次。默认值: False

输入:
  • global_step (Tensor) - 当前step数,即current_step。shape为 \(()\)

输出:

标量Tensor。当前step的学习率值,shape为 \(()\)

异常:
  • TypeError - learning_rate, end_learning_ratepower 不是float。

  • TypeError - decay_steps 不是int或 update_decay_steps 不是bool。

  • ValueError - end_learning_rate 小于0或 decay_steps 小于1。

  • ValueError - learning_ratepower 小于或等于0。

支持平台:

Ascend GPU

样例:

>>> import mindspore
>>> from mindspore import Tensor, nn
>>>
>>> learning_rate = 0.1
>>> end_learning_rate = 0.01
>>> decay_steps = 4
>>> power = 0.5
>>> global_step = Tensor(2, mindspore.int32)
>>> polynomial_decay_lr = nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power)
>>> lr = polynomial_decay_lr(global_step)
>>> net = nn.Dense(2, 3)
>>> optim = nn.SGD(net.trainable_params(), learning_rate=lr)