05-01-学习率调整策略

学习率learning rate
LR的作用在于更新步长
LRScheduler会去修改optimizer中的学习率,所以LRScheduler需要去关联一个优化器,从而关联优化器里面的学习率并改动
LRScheduler主要属性

LRScheduler主要方法

lr_scheduler.StepLR
等间隔调整学习率,调整倍数为 gamma 倍,调整间隔为 step_size。间隔单位是step。需要注意的是,step 通常是指 epoch

调用 scheduler_lr.step()

lr_scheduler.MultiStepLR
milestones(list)- 一个 list,每一个元素代表何时调整学习率,list 元素必须是递增的。如 milestones=[30,80,120]

调用 scheduler_lr.step()

lr_scheduler.ExponentialLR


LR学习率

lr_scheduler.CosineAnnealingLR

t_max = 50
scheduler_lr = optim.lr_scheduler.CosineAnnealingLR
(optimizer, T_max=t_max, eta_min=0.)

lr_scheduler.ReduceLROnPlateau

当某指标不再变化(下降或升高),调整学习率
例如,当验证集的 loss 不再下降时,进行学习率调整;或者监测验证集的 accuracy,当accuracy 不再上升时,则调整学习率
factor(float)- 学习率调整倍数(等同于其它方法的 gamma),即学习率更新为 lr = lr * factor
调用 scheduler_lr.step(loss_value)
必须把监控的参数放进去,标量
lr_scheduler.LambdaLR

为不同参数组设定不同学习率调整策略。调整规则为,lr = base_lr * lmbda(self.last_epoch)
两个参数组优化器
lr_init = 0.1 weights_1 = torch.randn((6, 3, 5, 5)) weights_2 = torch.ones((5, 5)) optimizer = optim.SGD([ {'params': [weights_1]}, {'params': [weights_2]}], lr=lr_init) lambda1 = lambda epoch: 0.1 ** (epoch // 20) lambda2 = lambda epoch: 0.95 ** epoch scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
小结

第一类,依一定规律有序进行调整,这一类是最常用的,分别是等间隔下降(Step),按需设定下降间隔(MultiStep),指数下(Exponential)和 CosineAnnealing。
第二类,依训练状况伺机调整,这就是 ReduceLROnPlateau 方法。属于自适
应的调整。
第三类,自定义调整,Lambda。Lambda 方法ᨀ供的调整策略十分灵活,我们可以为不
同的层设定不同的学习率调整方法,这在 fine-tune 中十分有用,我们不仅可为不同的层
设定不同的学习率,还可以为其设定不同的学习率调整策略
(来源于《PyTorch 模型训练实用教程》余霆嵩)