mindspore.experimental.optim.lr_scheduler.CosineAnnealingLR

class mindspore.experimental.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0.0, last_epoch=- 1)[源代码]

使用余弦退火对优化器参数组的学习率进行改变。下述公式中, \(\eta_{max}\) 为初始学习率,\(\eta_{min}\) 为学习率变化的最小值,\(T_{max}\) 为余弦函数的半周期,\(T_{cur}\) 为当前周期内的迭代数,\(\eta_{t}\) 为当前学习率。

\[\begin{split}\begin{aligned} \eta_t & = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})\left(1 + \cos\left(\frac{T_{cur}}{T_{max}}\pi\right)\right), & T_{cur} \neq (2k+1)T_{max}; \\ \eta_{t+1} & = \eta_{t} + \frac{1}{2}(\eta_{max} - \eta_{min}) \left(1 - \cos\left(\frac{1}{T_{max}}\pi\right)\right), & T_{cur} = (2k+1)T_{max}. \end{aligned}\end{split}\]

详情请查看 SGDR: Stochastic Gradient Descent with Warm Restarts

警告

这是一个实验性的动态学习率接口,需要和 mindspore.experimental.optim 下的接口配合使用。

参数:
  • optimizer (mindspore.experimental.optim.Optimizer) - 优化器实例。

  • T_max (int) - 余弦函数的半周期。

  • eta_min (float, 可选) - 学习率的最小值。默认值:0.0

  • last_epoch (int,可选) - 当前scheduler的 step() 方法的执行次数。默认值:-1

支持平台:

Ascend GPU CPU

样例:

>>> from mindspore.experimental import optim
>>> from mindspore import nn
>>> net = nn.Dense(3, 2)
>>> optimizer = optim.SGD(net.trainable_params(), lr=0.1, momentum=0.9)
>>> scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=2)
>>>
>>> for i in range(6):
...     scheduler.step()
...     current_lr = scheduler.get_last_lr()
...     print(current_lr)
[Tensor(shape=[], dtype=Float32, value= 0.05)]
[Tensor(shape=[], dtype=Float32, value= 0)]
[Tensor(shape=[], dtype=Float32, value= 0.05)]
[Tensor(shape=[], dtype=Float32, value= 0.1)]
[Tensor(shape=[], dtype=Float32, value= 0.05)]
[Tensor(shape=[], dtype=Float32, value= 0)]