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]¶
根据循环学习率策略 (CLR) 设置每个参数组的学习率。
该策略以恒定的频率在两个边界之间循环学习率,如论文 用于训练神经网络的循环学习率 中所述。两个边界之间的距离可以在每次迭代或每个循环的基础上进行缩放。
循环学习率策略在每次批处理后更改学习率。 step 应在批处理用于训练后调用。
此类具有三种内置策略,如论文中所述
“triangular”: 一个没有幅度缩放的基本三角形循环。
“triangular2”: 一个基本三角形循环,每次循环将初始幅度缩减一半。
“exp_range”: 一个循环,每次循环迭代将初始幅度缩放到 。
此实现改编自 github 仓库: bckenstler/CLR
- 参数
optimizer (优化器) – 包装的优化器。
max_lr (浮点数 或 列表) – 循环中每个参数组的上界学习率。在功能上,它定义了循环幅度 (max_lr - base_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 (str) – {'cycle', 'iterations'}。定义 scale_fn 是基于循环编号还是循环迭代次数(从循环开始以来的训练迭代次数)进行评估。默认值:'cycle'
cycle_momentum (bool) – 如果
True
,则动量会与学习率在 'base_momentum' 和 'max_momentum' 之间进行反向循环。默认值:Truebase_momentum (float 或 list) – 每个参数组在循环中的较低动量边界。请注意,动量会与学习率进行反向循环;在循环峰值时,动量为 'base_momentum',学习率为 'max_lr'。默认值:0.8
max_momentum (float 或 list) – 每个参数组在循环中的较高动量边界。在功能上,它定义了循环幅度 (max_momentum - base_momentum)。任何循环中的动量都是 max_momentum 和幅度的一些缩放之间的差值;因此,根据缩放函数,base_momentum 可能实际上不会达到。请注意,动量会与学习率进行反向循环;在循环开始时,动量为 'max_momentum',学习率为 'base_lr' 默认值:0.9
last_epoch (int) – 最后一个批次的索引。此参数用于恢复训练作业。由于 step() 应该在每个批次之后而不是每个 epoch 之后调用,因此此数字表示计算的批次总数,而不是计算的 epoch 总数。当 last_epoch=-1 时,调度从头开始。默认值:-1
如果
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_lr()[source]¶
计算批次索引处的学习率。
此函数将 self.last_epoch 视为最后一个批次索引。
如果 self.cycle_momentum 为
True
,则此函数具有更新优化器动量的副作用。
- print_lr(is_verbose, group, lr, epoch=None)¶
显示当前学习率。
自版本 2.4 起已弃用:
print_lr()
已弃用。请使用get_last_lr()
访问学习率。
- step(epoch=None)¶
执行一步。