pytorch代码中optimizer.step()和scheduler.step()有什么区别

本文介绍了在PyTorch中,optimizer.step()用于根据反向传播的梯度更新模型参数,而scheduler.step()主要用于调整学习率,通常按epoch进行。作者通过实例展示了如何在训练过程中使用Adam优化器和LambdaLR来控制学习率变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

optimizer.step()通常用在每个patch_size之中(一个patch_size的数据更新一次模型参数),而scheduler.step()通常用在epoch里面,但是不绝对,可以根据具体的需求来做。只有用了optimizer.step(),模型才会更新,而scheduler.step()是对lr进行调整。

  • optimizer:根据反向传播的梯度信息来更新网络参数,以降低loss
  • scheduler.step(): 更新优化器的学习率,一般按照epoch为单位进行更新
一个是用于更新模型参数的,一个是用于更新学习率的
import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR
import matplotlib.pyplot as plt

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()

# 实例化一个Adam优化器
optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)

# 实例化LambdaLR对象,lr_lambda是更新函数
scheduler_1 = LambdaLR(optimizer_1, lr_lambda=lambda epoch: 1/(epoch+1))

# 初始lr。optimizer_1.defaults保存了初始参数
print("初始化的学习率:", optimizer_1.defaults['lr'])

lr_list = []
for epoch in range(1, 11):
    #训练
    optimizer_1.zero_grad()
    optimizer_1.step()
    # 由于只给optimizer传了一个网络,所以optimizer_1.param_groups长度为1
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    lr_list.append(optimizer_1.param_groups[0]['lr'])
    # 更新学习率,一个epoch更新一次
    scheduler_1.step()

# 画出lr的变化
plt.plot(list(range(1, 11)), lr_list)
plt.xlabel("epoch")
plt.ylabel("lr")
plt.title("learning rate's curve changes as epoch goes on!")
plt.show()

输出:
初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.050000
第3个epoch的学习率:0.033333
第4个epoch的学习率:0.025000
第5个epoch的学习率:0.020000
第6个epoch的学习率:0.016667
第7个epoch的学习率:0.014286
第8个epoch的学习率:0.012500
第9个epoch的学习率:0.011111
第10个epoch的学习率:0.010000

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值