CyclicLR
- 类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函数。
此类包含了论文中提出的三种内置策略:
-
“三角形”:一个基本的三角形循环,不进行幅度缩放。
-
"triangular2": 每个周期初始幅度减半的基本三角形循环。
-
"exp_range": 每个周期迭代中,通过$\text{gamma}^{\text{cycle iterations}}$来缩放初始振幅的周期。
该实现参考了以下 GitHub 仓库:bckenstler/CLR
- 参数
-
-
optimizer (Optimizer) — 包裹后的优化器。
-
max_lr (float 或 list) – 每个参数组在周期中的最大学习率。从功能上看,它定义了周期的振幅(max_lr - base_lr)。 周期内的实际学习率是基础学习率加上振幅缩放后的值;因此,根据具体的缩放函数,实际的学习率可能不会达到 max_lr。
-
step_size_up (int) – 在增加周期的一半中进行的训练迭代次数。默认值:2000
-
step_size_down (int) – 在一个周期的下降阶段中的训练迭代次数。如果未指定 step_size_down,则将其设置为 step_size_up。默认值:None
-
mode (str) – 可选值之一 {triangular, triangular2, exp_range},对应于上述详细策略。如果 scale_fn 不为 None,则忽略此参数。默认值:‘triangular’
-
gamma (float) – 在“exp_range”缩放函数中的常量:gamma**(cycle iterations) 默认值: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”之间与学习率相反地进行循环。默认值:True -
base_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
-
verbose (bool | str) –
如果设置为
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()[源代码]
-
在批次索引处计算学习率。
此函数将self.last_epoch视为最后一批次的索引。
如果 self.cycle_momentum 为
True
,该函数将会更新优化器的动量,这是一个副作用。
- load_state_dict(state_dict)[源代码]
-
加载调度器的状态。
- print_lr(is_verbose, group, lr, epoch=None)
-
显示当前学习率。
自版本 2.4 起已弃用:
print_lr()
已被弃用,请使用get_last_lr()
来访问学习率。
- step(epoch=None) 由于上述代码格式已经较为简洁,直接翻译可能难以形成自然语言描述。但根据上下文和意图,可以尝试如下表述: 进行一个训练步骤,参数`epoch`可选设置为`None`。
-
执行一个步骤。
-