快捷方式

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, verbose='deprecated')[源代码]

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

1cycle 策略从初始学习率退火到某个最大学习率,然后从该最大学习率退火到某个比初始学习率低得多的最小学习率。该策略最初在论文 超收敛:使用大学习率训练神经网络的超快方法 中描述。

1cycle 学习率策略在每个批次之后更改学习率。 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 (整数) – 训练的轮数。如果未提供 total_steps 的值,则与 steps_per_epoch 一起使用来推断周期中的总步数。默认值:None

  • steps_per_epoch (整数) – 训练的每轮步数。如果未提供 total_steps 的值,则与 epochs 一起使用来推断周期中的总步数。默认值:None

  • pct_start (浮点数) – 提高学习率所花费的周期百分比(以步数表示)。默认值:0.3

  • anneal_strategy (字符串) – {‘cos’, ‘linear’} 指定退火策略:“cos” 表示余弦退火,“linear” 表示线性退火。默认值:‘cos’

  • cycle_momentum (布尔值) – 如果为 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) – 最后一个批次的索引。此参数在恢复训练作业时使用。由于 step() 应该在每个批次后调用,而不是在每个 epoch 后调用,因此此数字表示计算的总批次数,而不是计算的总 epoch 数。当 last_epoch=-1 时,调度从头开始。默认值:-1

  • verbose (bool | str) –

    如果为 True,则为每次更新打印一条消息到标准输出。默认值:False

    从版本 2.2 开始弃用: verbose 已弃用。请使用 get_last_lr() 访问学习率。

示例

>>> 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()

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

返回类型

List[float]

get_lr()[source]

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

load_state_dict(state_dict)

加载调度程序的状态。

参数

state_dict (dict) – 调度程序状态。应该是从调用 state_dict() 返回的对象。

print_lr(is_verbose, group, lr, epoch=None)

显示当前学习率。

从版本 2.4 开始弃用: print_lr() 已弃用。请使用 get_last_lr() 访问学习率。

state_dict()

dict 的形式返回调度程序的状态。

它包含 self.__dict__ 中每个变量的条目,这些条目不是优化器。

step(epoch=None)

执行一步。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

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

查看资源