How to adjust learning rate

官方解释:torch.optim — PyTorch 1.9.1 documentation

1.自我解释:torch.optim.lr_scheduler

        官方给出了很多关于调整学习率的方法,但是调整学习率的时候一般会根据你所训练的次数,做出相应的调整,这是代码自动完成的。

        学习率的调整应该在优化器更新之前,例如:官方给出的例子

model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)  #此为优化器初始化,采用SGD优化器,没有使用动量,收敛慢,容易陷入局部极值。
scheduler = ExponentialLR(optimizer, gamma=0.9)  #此为学习率调整初始化

for epoch in range(20):
    for input, target in dataset:
        optimizer.zero_grad()  #优化器初始化
        output = model(input) #模型输入
        loss = loss_fn(output, target)
        loss.backward()
        optimizer.step() #优化器更新
    scheduler.step()  #学习率调整更新

        学习率一般是在初始训练数据时,学习率会大一点,然后随着训练次数的增加,学习率会慢下降,毕竟寻找极小值时候,不能步长太大。

2.官方给出了很多调整学习率的函数,例如:

#1》lr_scheduler.LambdaLR方法


torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)

        此调整方法是在最开始进行数据训练时,学习率会乘以一个函数(在下理解为一个系数,只是分批次进行,例如每训练10次,lr=0.02,其他情况下,lr=0.01,最后几次,lr=lr_init),然后随着训练次数的增加,到达最后几次的时候,学习率调整为初始化时候的设定的参数值。

2》lr_scheduler.MultiplicativeLR的方法

torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)

        此方法与第一种方法差不多,只是此方法都是乘以一个固定的系数因子,例如lambda=0.95,在最后训练结束之前的几次又回归到初始设置的学习率,lr=lr_init。

3》lr_scheduler.StepLR方法

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

上述最好的解释为:

假设初始化lr_init=0.05,epoch=130

当0<epoch<20时,lr=0.5

当20<epoch<40时,lr=0.05

当40<epoch<80时,lr=0.02

当80<epoch<120时,lr=0.01

当120<epoch<=130时,lr=0.05  #回归初始化设置

4》lr_scheduler.MultiStepLR方法

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

次法在上述基础上增加一个gamm=0.1的衰减系数,当epoch进入一个milestone时,lr=lr*0.1**epoch(在此处等号右边的lr是对应下面的  lr  ,在不同区间,学习率  lr  不同)

当0<epoch<20时,lr=0.5

当20<epoch<40时,lr=0.05

当40<epoch<80时,lr=0.02

当80<epoch<120时,lr=0.01

(补充)在网络的不同卷积层次可以设置不同的学习率,例如:

import torch.optim as optim
 
optimizer = optim.Adam([{'params':model.conv1.parameters(),'lr':0.05},
                        {'params':model.conv2.parameters(),'lr':0.02}
                        ])

        使用Adam优化器对网络训练时,卷积conv1采用的学习率  lr=0.05,在卷积con2中采用的学习率  lr=0.02 。

后续。。。(小琼)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值