[pytorch] torch.optimizer.lr_scheduler调整学习率
torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。
学习率的调整应该放在optimizer更新之后,下面是一个参考蓝本:
scheduler = ...
for epoch in range(100):
train(...)
validate(...)
scheduler.step()
另外本文介绍的调整学习率的函数都是基于epoch大小变化进行调整的。
torch.optim.lr_scheduler.LambdaLR
class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
更新的公式为:
n e w _ l r = λ × i n i t i a l _ l r new \_{_lr}=\lambda×initial \_{_lr} new_lr=λ×initial_lr
其中new_lr
new_lr是得到的新的学习率,initial_lr
initial_lr是初始的学习率,λ
λ是通过参数lr_lambda和epoch得到的。
参数:
- optimizer (Optimizer):要更改学习率的优化器;
- lr_lambda(function or list):根据epoch计算λ
λ的函数;或者是一个list的这样的function,分别计算各个parameter groups的学习率更新用到的λ
λ; - last_epoch (int):最后一个epoch的index,如果是训练了很多个epoch后中断了,继续训练,这个值就等于加载的模型的epoch。默认为-1表示从头开始训练,即从epoch=1开始。
import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR
initial_lr = 0.1
class model(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)
def forward(self, x):
pass
net_1 = model()
optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = LambdaLR(optimizer_1, lr_lambda=lambda epoch: 1/(epoch+1))
print(

本文详细介绍了PyTorch中torch.optim.lr_scheduler模块提供的五种学习率调整策略,包括LambdaLR、StepLR、MultiStepLR和ExponentialLR,通过实例展示了如何在不同场景下应用这些策略以优化模型训练。
最低0.47元/天 解锁文章
788

被折叠的 条评论
为什么被折叠?



