快捷键

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

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

政策以恒定频率在两个边界之间循环学习率,具体细节请参阅论文《循环学习率训练神经网络》。两个边界之间的距离可以在每次迭代或每个周期的基础上进行缩放。

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

该类具有三种内置策略,如论文所述:

  • “三角波”:一个基本的三角波循环,没有幅度缩放。

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

  • “exp_range”:一个周期,每次周期迭代将初始振幅按 gammacycle iterations\text{gamma}^{\text{cycle iterations}} 缩放。

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

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

  • base_lr(浮点数或列表)- 每个参数组的初始学习率,是周期中的下限边界。

  • max_lr (浮点数或列表) – 每个参数组在周期中的上限学习率边界。从功能上讲,它定义了周期振幅(max_lr - base_lr)。任何周期的 lr 是 base_lr 和振幅的某种缩放之和;因此,max_lr 可能实际上无法达到,这取决于缩放函数。

  • step_size_up (整数) – 周期增加半部分的训练迭代次数。默认:2000

  • step_size_down (整数) – 周期减少半部分的训练迭代次数。如果 step_size_down 为 None,则设置为 step_size_up。默认:None

  • mode (字符串) – {triangular, triangular2, exp_range}之一。值对应于上述详细说明的政策。如果 scale_fn 不为 None,则忽略此参数。默认:‘triangular’

  • gamma (浮点数) – ‘exp_range’缩放函数中的常数:gamma**(周期迭代次数) 默认:1.0

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

  • scale_mode (字符串) – {‘cycle’,‘iterations’}。定义 scale_fn 是在周期编号还是周期迭代(自周期开始以来的训练迭代次数)上评估。默认:‘cycle’

  • cycle_momentum (布尔值) – 如果 True ,则动量与学习率在‘base_momentum’和‘max_momentum’之间循环。默认:True

  • 基础动量(浮点数或列表)- 每个参数组在周期中的下限动量。请注意,动量与学习率相反周期;在周期的峰值,动量是‘基础动量’,学习率是‘最大学习率’。默认值:0.8

  • 最大动量(浮点数或列表)- 每个参数组在周期中的上限动量。在功能上,它定义了周期振幅(最大动量 - 基础动量)。任何周期的动量是最大动量与振幅的某种缩放值的差;因此,基础动量可能实际上无法达到,这取决于缩放函数。请注意,动量与学习率相反周期;在周期的开始,动量是‘最大动量’,学习率是‘基础学习率’。默认值:0.9

  • 最后一个 epoch(整数)- 最后一个批次的索引。当恢复训练作业时使用此参数。由于 step()应在每个批次之后而不是在每个 epoch 之后调用,因此此数字表示计算的总批次数,而不是计算的总 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)
>>> data_loader = torch.utils.data.DataLoader(...)
>>> for epoch in range(10):
>>>     for batch in data_loader:
>>>         train_batch(...)
>>>         scheduler.step()
get_last_lr()[source]

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

返回类型:

list[float]

get_lr()[source][source]

计算批次数的学习率。

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

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

加载状态字典(state_dict)[source][source] ¶

加载调度器的状态。

scale_fn(x)[source][source]

获取缩放策略。

返回类型:

浮点数

step(epoch=None)[source]

执行一步操作。


© 版权所有 PyTorch 贡献者。

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

文档

PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源