学习率调整lr_scheduler、Pytorch

参考
torch.optim.lr_scheduler:调整学习率

torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率的方法。
torch.optim.lr_scheduler.ReduceLROnPlateau则提供了基于训练中某些测量值来调整学习率的方法。

PyTorch 1.1.0及之后的版本中,学习率的调整应该放在optimizer更新之后,即 scheduler.step()的调用位置在 optimizer.step()之后,optimizer.step()在train函数中使用:

>>> scheduler = ...
>>> for epoch in range(100):
>>>     train(...)
>>>     validate(...)
>>>     scheduler.step()

在PyTorch 1.1.0之前的版本,学习率的调整应该被放在optimizer更新之前。

Adam:本身是梯度下降算法,但是有自适应更新学习率的能力。具体使用时,通常将其使用为梯度下降工具optimizer,可结合学习率调整工具lr_scheduler帮助Adam算法更快收敛。
在这里插入图片描述

class torch.optim.Adam(params,
lr=0.001, betas=(0.9, 0.999), eps=1e-08, 
weight_decay=0, amsgrad=False)

# 参数解释
params (iterable):需要优化的网络参数。参数指神经网络中各层的线性变换矩阵和偏置。通常的形参书写方式为net.parameters()
lr (float, optional):基础学习率η; 
betas (Tuple[float, float], optional) (default: (0.9, 0.999)):β1,β2
weight_decay:不在Adam更新算法中,是用来实现L2正则化的参数。

需注意的点,下面所有Lr_scheduler的学习率更新式中的学习率初值参数,皆来源于它的optimizer参数,即学习率初值参数来源于梯度下降优化器,而不需要显式作为Lr_scheduler的形参。

LambdaLR
lr=λ×initial_lr

class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
#  可让λ为epoch的函数,从而实现令学习率更新与epoch有关。例:
scheduler = LambdaLR(optimizer_1, lr_lambda=lambda epoch: 1/(epoch+1))

StepLR
lr=initial_lr×γ^(epoch/step_size)

class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

ExponentialLR
lr=initial_lr×γ^epoch

class torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)

MultiStepLR

class torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

milestones(list):递增的list,存放要更新lr的epoch;
每次遇到milestones中的epoch,lr乘以gamma更新
例:
Milestones = [1,10] 表示当epoch=1,lr =lr×γ= initial_ lr×γ
当epoch=10,lr = lr×γ

CosineAnnealingLR,余弦退火调整
在这里插入图片描述
学习率变化周期为2T,当前epoch轮数=0、2T时,学习率为最大值,当前epoch轮数=T时,学习率为最小值。
一个周期内,学习率先减小再增大,目的是为了先达到局部极值,然后尝试离开当前的局部极值点。

class torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
# eta_min对应 η_min,最小学习率,T_max对应周期半周期T
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值