欢迎光临散文网 会员登陆 & 注册

05-01-学习率调整策略

2022-08-10 18:02 作者:冰糖炖子瑜  | 我要投稿

学习率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 模型训练实用教程》余霆嵩)

05-01-学习率调整策略的评论 (共 条)

分享到微博请遵守国家法律