评价此页

CosineAnnealingLR#

class torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0.0, last_epoch=-1)[source]#

使用余弦退火调度设置每个参数组的学习率。

The learning rate is updated recursively using

ηt+1=ηmin+(ηtηmin)1+cos((Tcur+1)πTmax)1+cos(TcurπTmax)\eta_{t+1} = \eta_{\min} + (\eta_t - \eta_{\min}) \cdot \frac{1 + \cos\left(\frac{(T_{cur}+1) \pi}{T_{max}}\right)} {1 + \cos\left(\frac{T_{cur} \pi}{T_{max}}\right)}

这实现了在 SGDR: Stochastic Gradient Descent with Warm Restarts 中提出的闭式调度器的递归近似。

ηt=ηmin+12(ηmaxηmin)(1+cos(TcurπTmax))\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min}) \left( 1 + \cos\left(\frac{T_{cur} \pi}{T_{max}}\right) \right)

其中

  • ηt\eta_t 是步长 tt 的学习率。

  • TcurT_{cur} 是自上次重启以来的 epoch 数。

  • TmaxT_{max} 是一个周期中的最大 epoch 数。

注意

尽管 SGDR 包含周期性重启,但此实现执行余弦退火,不进行重启,因此 Tcur=tT_{cur} = t 并且随着每次调用 step() 单调递增。

参数
  • optimizer (Optimizer) – 包装的优化器。

  • T_max (int) – 最大迭代次数。

  • eta_min (float) – 最小学习率。默认值:0。

  • last_epoch (int) – 最后一个 epoch 的索引。默认为 -1。

示例

>>> num_epochs = 100
>>> scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs)
>>> for epoch in range(num_epochs):
>>>     train(...)
>>>     validate(...)
>>>     scheduler.step()
../_images/CosineAnnealingLR.png
get_last_lr()[source]#

返回当前调度器计算的最后一个学习率。

返回类型

list[float]

get_lr()[source]#

检索每个参数组的学习率。

返回类型

list[float]

load_state_dict(state_dict)[source]#

加载调度器的状态。

参数

state_dict (dict) – 调度器状态。应为调用 state_dict() 返回的对象。

state_dict()[source]#

dict 的形式返回调度器的状态。

它包含 self.__dict__ 中除优化器之外的所有变量的条目。

返回类型

dict[str, Any]

step(epoch=None)[source]#

执行一步。