评价此页

CyclicLR#

class torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1)[source]#

根据循环学习率策略(CLR)设置每个参数组的学习率。

该策略在恒定频率下在两个边界之间循环学习率,如论文 Cyclical Learning Rates for Training Neural Networks 中详述。两个边界之间的距离可以按每次迭代或每个周期进行缩放。

循环学习率策略会在每个 batch 之后更改学习率。训练完成后应调用 step

此类具有论文中提出的三种内置策略:

  • “triangular”:基本三角周期,没有幅度缩放。

  • “triangular2”:基本三角周期,每个周期将初始幅度减半。

  • “exp_range”:一个周期,通过 gammacycle iterations\text{gamma}^{\text{cycle iterations}} 在每个周期迭代时缩放初始幅度。

此实现改编自 github 仓库: bckenstler/CLR

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

  • base_lr (floatlist) – 初始学习率,是每个参数组在周期中的下边界。

  • max_lr (floatlist) – 每个参数组在周期中的上学习率边界。功能上,它定义了周期幅度 (max_lr - base_lr)。任何周期的学习率是 base_lr 和幅度某种缩放的总和;因此,根据缩放函数,max_lr 可能实际上未达到。

  • step_size_up (int) – 周期递增一半的训练迭代次数。默认值:2000

  • step_size_down (int) – 周期递减一半的训练迭代次数。如果 step_size_down 为 None,则设置为 step_size_up。默认值:None

  • mode (str) – {triangular, triangular2, exp_range} 中的一个。值对应于上面详述的策略。如果 scale_fn 不为 None,则忽略此参数。默认值:'triangular'

  • gamma (float) – “exp_range” 缩放函数中的常数:gamma**(cycle iterations) 默认值:1.0

  • scale_fn (function) – 自定义缩放策略,由一个参数的 lambda 函数定义,对于所有 x >= 0,0 <= scale_fn(x) <= 1。如果指定,则忽略 'mode'。默认值:None

  • scale_mode (str) – {‘cycle’, ‘iterations’}。定义 scale_fn 是基于周期数还是周期迭代次数(自周期开始以来的训练迭代次数)进行评估。默认值:‘cycle’

  • cycle_momentum (bool) – 如果为 True,则动量在 'base_momentum' 和 'max_momentum' 之间与学习率成反比循环。默认值:True

  • base_momentum (floatlist) – 每个参数组在周期中的下动量边界。请注意,动量与学习率成反比循环;在周期的峰值,动量为 'base_momentum',学习率为 'max_lr'。默认值:0.8

  • max_momentum (floatlist) – 每个参数组在周期中的上动量边界。功能上,它定义了周期幅度 (max_momentum - base_momentum)。任何周期的动量是 max_momentum 与幅度某种缩放的差值;因此,根据缩放函数,base_momentum 可能实际上未达到。请注意,动量与学习率成反比循环;在周期的开始,动量为 'max_momentum',学习率为 'base_lr'。默认值:0.9

  • last_epoch (int) – 最后一个 batch 的索引。此参数用于恢复训练任务。由于 step() 应在每个 batch 之后调用,而不是在每个 epoch 之后调用,因此此数字代表计算出的总 batch 数,而不是计算出的总 epoch 数。当 last_epoch=-1 时,调度器从头开始。默认值:-1

示例

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> scheduler = torch.optim.lr_scheduler.CyclicLR(
...     optimizer,
...     base_lr=0.01,
...     max_lr=0.1,
...     step_size_up=10,
... )
>>> data_loader = torch.utils.data.DataLoader(...)
>>> for epoch in range(10):
>>>     for batch in data_loader:
>>>         train_batch(...)
>>>         scheduler.step()
../_images/CyclicLR.png
get_last_lr()[source]#

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

返回类型

list[float]

get_lr()[source]#

计算 batch 索引处的学习率。

此函数将 self.last_epoch 视为最后一个 batch 索引。

如果 self.cycle_momentumTrue,则此函数具有更新优化器动量的副作用。

返回类型

list[float]

load_state_dict(state_dict)[source]#

加载调度器的状态。

scale_fn(x)[source]#

获取缩放策略。

返回类型

浮点数

state_dict()[source]#

返回调度器状态,作为一个 dict

它包含 self.__dict__ 中所有非优化器变量的一个条目。学习率 lambda 函数仅在它们是可调用对象时保存,而不是在它们是函数或 lambda 时保存。

保存或加载调度器时,请务必同时保存或加载优化器的状态。

返回类型

dict[str, Any]

step(epoch=None)[source]#

执行一步。