快捷键

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][source] ¶

根据一周期学习率策略设置每个参数组的 学习率。

一周期策略将学习率从初始学习率逐渐增加到某个最大学习率,然后从该最大学习率逐渐减少到比初始学习率低得多的最小学习率。该策略最初在论文《超快训练神经网络:使用大学习率的非常快速训练》中描述。

一周期学习率策略在每个批次后更改学习率。应在使用批次进行训练后调用 step。

此调度器不可链式调用。

注意,循环中的总步数可以通过两种方式之一确定(按优先级排序):

  1. 明确提供了 total_steps 的值。

  2. 提供了 epochs(轮数)和每轮步数(steps_per_epoch)。在这种情况下,总步数通过 total_steps = epochs * steps_per_epoch 推断得出。

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

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

参数:
  • 优化器(Optimizer)- 包装的优化器。

  • max_lr (浮点数或列表) – 循环中每个参数组的上限学习率边界。

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

  • epochs (整数) – 训练的轮数。此值与 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 (布尔值) – 如果 True ,则动量与学习率在‘base_momentum’和‘max_momentum’之间循环。默认:True

  • base_momentum (float or list) – 循环中每个参数组的下限动量边界。注意,动量与学习率相反周期;在周期的峰值,动量是‘base_momentum’,学习率是‘max_lr’。默认:0.85

  • max_momentum (浮点数或列表) – 每个参数组的循环上限动量。功能上,它定义了循环振幅(max_momentum - base_momentum)。请注意,动量与学习率相反周期;循环开始时,动量为‘max_momentum’,学习率为‘base_lr’。默认值:0.95

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

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

  • three_phase (布尔值) – 如果 True ,则使用计划的第三阶段根据‘final_div_factor’消除学习率,而不是修改第二阶段(前两个阶段将关于‘pct_start’指示的步骤对称)。

  • 最后一个 epoch(整数)- 最后一个批次的索引。当恢复训练作业时使用此参数。由于 step()应在每个批次之后而不是在每个 epoch 之后调用,因此此数字表示计算的总批次数,而不是计算的总 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()
get_last_lr()[source]

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

返回类型:

list[float]

get_lr()[source][source]

计算每个参数组的学习率。

load_state_dict(state_dict)[source]

加载调度器的状态。

参数:

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

state_dict()[source]

返回调度器的状态作为 dict

包含了 self.__dict__中每个非优化器的变量条目。

step(epoch=None)[source]

执行一步操作。


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源