pytorch中训练过程中自动调整学习率问题

前言

在训练的时候学习,往往需要自动修改学习率(learing rate)。
在pytorch中就要用到:torch.optim.lr_scheduler 模块。
该模块提供了一些根据epoch训练代数来调整学习率的做法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。

官方例子

pytorch官网

模板

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

例一

###模型
model = net()
#优化器对象
optimizer = SGD(model, lr= 0.1)
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()

例二

model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)
scheduler1 = ExponentialLR(optimizer, gamma=0.9)
scheduler2 = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1)

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()
    scheduler1.step()
    scheduler2.step()

另外一个例子

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import StepLR
import itertools
 
 
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 = StepLR(optimizer_1, step_size=3, gamma=0.1)
 
print("初始化的学习率:", optimizer_1.defaults['lr'])
 
for epoch in range(1, 11):
    # train
 
    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step()

output:

初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.100000
第3个epoch的学习率:0.100000
第4个epoch的学习率:0.010000
第5个epoch的学习率:0.010000
第6个epoch的学习率:0.010000
第7个epoch的学习率:0.001000
第8个epoch的学习率:0.001000
第9个epoch的学习率:0.001000
第10个epoch的学习率:0.000100

感谢

因为最近学习到了这方面的知识,这篇文章主要是为了给自己做一个笔记。感谢小有名气的可爱鬼
博主,写的另外一个例子。

posted @ 2021-07-04 16:37  不怕路远  阅读(481)  评论(0)    收藏  举报