mindspore.experimental.optim.lr_scheduler.CosineAnnealingWarmRestarts

class mindspore.experimental.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=- 1)[源代码]

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

\[\eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})\left(1 + \cos\left(\frac{T_{cur}}{T_{i}}\pi\right)\right)\]

\(T_{cur}=T_{i}\) 时,\(\eta_t = \eta_{min}\),热重启后 \(T_{cur}=0\) 时,设置 \(\eta_t=\eta_{max}\)

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

警告

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

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

  • T_0 (int) - 余弦函数的初始周期数。

  • T_mult (int, 可选) - 迭代中对 \(T_{i}\) 进行增长的乘法系数。默认值:1

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

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

异常:
  • ValueError - T_0 小于等于0或不是int类型。

  • ValueError - T_mult 小于等于1或不是int类型。

  • ValueError - eta_min 不是int或float类型。

支持平台:

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.CosineAnnealingWarmRestarts(optimizer, 2)
>>> iters = 3
>>> for epoch in range(2):
...     for i in range(iters):
...         scheduler.step(epoch + i / iters)
...         current_lr = scheduler.get_last_lr()
...         print(current_lr)
[Tensor(shape=[], dtype=Float32, value= 0.1)]
[Tensor(shape=[], dtype=Float32, value= 0.0933013)]
[Tensor(shape=[], dtype=Float32, value= 0.075)]
[Tensor(shape=[], dtype=Float32, value= 0.05)]
[Tensor(shape=[], dtype=Float32, value= 0.025)]
[Tensor(shape=[], dtype=Float32, value= 0.00669873)]
step(epoch=None)[源代码]

按照定义的计算逻辑计算并修改学习率。

参数:
  • epoch (int,可选) - epoch数。默认值: None