快捷方式

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

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

该策略在两个边界之间以恒定频率循环学习率,详见论文 用于训练神经网络的循环学习率。两个边界之间的距离可以按每次迭代或每个周期进行缩放。

循环学习率策略在每个批次后更改学习率。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)。任何循环中的 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**(循环迭代次数) 默认值: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) – 上一批的索引。此参数在恢复训练作业时使用。由于 step() 应在每个批次之后而不是每个 epoch 之后调用,因此此数字表示计算的批次总数,而不是计算的 epoch 总数。当 last_epoch=-1 时,计划从头开始。默认值:-1

  • verbose (bool | str) –

    如果 True,则为每次更新向 stdout 打印一条消息。默认值:False

    自版本 2.2 起已弃用: verbose 已弃用。请使用 get_last_lr() 访问学习率。

示例

>>> 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_momentumTrue,则此函数具有更新优化器动量的副作用。

load_state_dict(state_dict)[source][source]

加载调度器的状态。

print_lr(is_verbose, group, lr, epoch=None)[source]

显示当前学习率。

自版本 2.4 起已弃用: print_lr() 已弃用。请使用 get_last_lr() 访问学习率。

scale_fn(x)[source][source]

获取缩放策略。

返回类型

float

step(epoch=None)[source]

执行一个步骤。

文档

访问 PyTorch 的综合开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

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

查看资源