1.出处介绍
CyclicLR循环学习率出自于论文《Cyclical Learning Rates for Training Neural Networks》;与之前的固定或者单调递减的学习率不同,这是周期性变化。有三个参数:上边界max_lr,下边界base_lr,补长stepsize。如下所示,学习率在base_lr和max_lr震荡更新。
2.参数介绍
- base_lr:基础学习率
- max_lr:学习率上限
- step_size_up:学习率上升的步数
- step_size_down:学习率下降的步数
- mode:共三种模式分别为triangular,triangular2和exp_range
- gamma:exp_range中的常量gamma**(cycle iterations)
- scale_fn:自定义缩放策略保证所有 x ≥ 0 x\geq 0 x≥0的情况下 s c a l e _ f n ( x ) scale\_fn(x) scale_fn(x)的值域为 [ 0 , 1 ] [0,1] [0,1]
- scale_mode:两种模式cycle和iterations
- cycle_momentum:如果为True,则动量与’base_momentum’和’max_momentum之间的学习率成反比
- base_momentum:初始动量,即每个参数组的循环中的下边界。
- max_momentum:每个参数组的循环中的上动量边界。
3.代码实例
#设置优化器
optimizer = torch.optim.SGD(model.parameters(),lr=opt.lr,momentum=0.9)
base_lr = 2e-3
max_lr = 6e-3
#设置学习率调节方法
scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=500, step_size_down=500, 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)
for epoch in range(opt.num_epochs):
train(...)
validate(...)
scheduler.step()