评价此页

OneCycleLR#

class torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=-1)[source]#

根据 1cycle 学习率策略设置每个参数组的学习率。

1cycle 策略将学习率从初始学习率衰减到一个最大学习率,然后从该最大学习率衰减到一个远低于初始学习率的最小学习率。该策略最初在论文 Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates 中进行了描述。

1cycle 学习率策略在每个 batch 之后都会改变学习率。`step` 应在 batch 用于训练后调用。

此调度器不支持链式调用。

另请注意,周期中的总步数可以通过以下两种方式之一确定(按优先级顺序列出):

  1. 明确提供了 total_steps 的值。

  2. 提供了 epoch 的数量(epochs)和每个 epoch 的步数(steps_per_epoch)。在这种情况下,总步数推断为 total_steps = epochs * steps_per_epoch。

您必须提供 total_steps 的值,或者同时提供 epochs 和 steps_per_epoch 的值。

此调度器的默认行为遵循 fastai 实现的 1cycle,该实现声称“未发表的工作通过仅使用两个阶段获得了更好的结果”。要模仿原始论文的行为,请将 `three_phase=True` 设置为 True。

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

  • max_lr (floatlist) – 每个参数组在周期中的上限学习率。

  • total_steps (int) – 周期中的总步数。注意,如果此处未提供值,则必须通过提供 epochs 和 steps_per_epoch 的值来推断。默认值:None

  • epochs (int) – 训练的 epoch 数。此参数与 steps_per_epoch 一起用于推断周期中的总步数,前提是未提供 total_steps 的值。默认值:None

  • steps_per_epoch (int) – 每个 epoch 的训练步数。此参数与 epochs 一起用于推断周期中的总步数,前提是未提供 total_steps 的值。默认值:None

  • pct_start (float) – 周期中用于增加学习率的百分比(按步数计算)。默认值:0.3

  • anneal_strategy (str) – {‘cos’, ‘linear’} 指定衰减策略:“cos” 表示余弦衰减,“linear” 表示线性衰减。默认值:'cos'

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

  • base_momentum (floatlist) – 每个参数组在周期中的动量下限。注意,动量与学习率成反比;在周期的峰值处,动量为 ‘base_momentum’,学习率为 ‘max_lr’。默认值:0.85

  • max_momentum (floatlist) – 每个参数组在周期中的动量上限。功能上,它定义了周期的幅度(max_momentum - base_momentum)。注意,动量与学习率成反比;在周期的开始处,动量为 ‘max_momentum’,学习率为 ‘base_lr’。默认值:0.95

  • div_factor (float) – 通过 initial_lr = max_lr/div_factor 确定初始学习率。默认值:25

  • final_div_factor (float) – 通过 min_lr = initial_lr/final_div_factor 确定最小学习率。默认值:1e4

  • three_phase (bool) – 如果为 `True`,则使用计划的第三阶段根据 ‘final_div_factor’ 来消除学习率,而不是修改第二阶段(前两个阶段将对称于由 ‘pct_start’ 指定的步数)。

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

示例

>>> data_loader = torch.utils.data.DataLoader(...)
>>> optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, momentum=0.9)
>>> scheduler = torch.optim.lr_scheduler.OneCycleLR(
...     optimizer, max_lr=0.01, steps_per_epoch=len(data_loader), epochs=10
... )
>>> for epoch in range(10):
>>>     for batch in data_loader:
>>>         train_batch(...)
>>>         optimizer.step()
>>>         scheduler.step()
../_images/OneCycleLR.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]#

执行一步。