Shortcuts

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')[源代码]

根据循环学习率策略(CLR)设置每个参数组的学习率。该策略在两个边界之间以固定频率循环学习率,如论文用于训练神经网络的循环学习率中所述。两个边界之间的距离可以在每次迭代或每个周期基础上进行缩放。

循环学习率策略在每个批次后改变学习率。 step 应该在一批次用于训练后调用。

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

  • “triangular”: 一个基本的三角形周期,没有幅度缩放。

  • “triangular2”: 一个基本的三角形循环,每个周期将初始幅度减半。

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

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

Parameters
  • 优化器 (优化器) – 包装的优化器。

  • base_lrfloatlist)——初始学习率,这是每个参数组在循环中的下限。

  • max_lr (floatlist) – 每个参数组在循环中的上学习率边界。从功能上讲,它定义了循环的幅度(max_lr - base_lr)。在任何循环中,学习率是 base_lr 加上幅度的一些缩放;因此,max_lr 可能实际上不会达到,具体取决于缩放函数。

  • step_size_up (int) – 一个周期中增加部分的训练迭代次数。默认值:2000

  • step_size_down (int) – 一个周期中减少部分的训练迭代次数。如果 step_size_down 为 None,则将其设置为 step_size_up。默认值:None

  • 模式 (字符串) – 可以是 {triangular, triangular2, exp_range} 之一。 这些值对应于上述详细的政策。 如果 scale_fn 不是 None,则忽略此参数。 默认值:‘triangular’

  • gamma (float) – ‘exp_range’ 缩放函数中的常数: gamma**(循环迭代次数) 默认值: 1.0

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

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

  • cycle_momentum (bool) – 如果 True,动量会在学习率之间反向循环,介于‘base_momentum’和‘max_momentum’之间。 默认值:True

  • base_momentumfloatlist)– 每个参数组在周期中的较低动量边界。请注意,动量与学习率成反比;在周期的峰值处,动量为‘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) –

    如果 True,则向标准输出打印每条更新消息。默认值: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()

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

get_lr()[源代码]

计算批次索引处的学习率。此函数将self.last_epoch视为最后的批次索引。

如果 self.cycle_momentumTrue,此函数会有一个副作用,即更新优化器的动量。

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

显示当前的学习率。

优云智算