MultiStepLR

torch.optim.lr_scheduler.MultiStepLR 是 PyTorch 提供的一种学习率调度器,用于在训练过程中按指定的里程碑(milestones)调整优化器的学习率。它允许在训练的不同阶段逐步降低学习率,从而帮助模型在接近局部最优解时更稳定地收敛。

主要参数

  1. optimizer:被调度的优化器。这通常是一个已经定义好的 PyTorch 优化器实例(例如,torch.optim.SGDtorch.optim.Adam)。

  2. milestones:一个包含整数的列表,表示在这些 epoch 后调整学习率。这些整数是非递减的,即每个里程碑 epoch 数需要依次增大。

  3. gamma:每次在指定的里程碑处,学习率乘以的衰减因子。通常是一个小于 1 的数(例如,0.1)。

  4. last_epoch:训练的最后一个 epoch 数。如果是从头开始训练,则设置为 -1。这个参数在从某个中断点恢复训练时非常有用。

用法示例

import torch
import torch.optim as optim

# 假设我们有一个简单的模型和优化器
model = torch.nn.Linear(2, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 创建一个 MultiStepLR 调度器,在第30和第80个epoch时调整学习率
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 80], gamma=0.1)

# 模拟训练过程
num_epochs = 100
for epoch in range(num_epochs):
    # 训练步骤(示例)
    optimizer.zero_grad()
    output = model(torch.randn(1, 2))
    loss = (output - torch.randn(1)).pow(2).sum()
    loss.backward()
    optimizer.step()
    
    # 调度器步进
    scheduler.step()

    # 打印当前学习率
    current_lr = optimizer.param_groups[0]['lr']
    print(f'Epoch {epoch+1}, Learning Rate {current_lr}')

运行机制

  1. 初始化:创建调度器实例时,指定里程碑和衰减因子。

  2. 训练循环:在每个 epoch 结束后调用 scheduler.step(),调度器会检查当前 epoch 是否在 milestones 列表中,如果是,则将学习率乘以 gamma

学习率变化示例

假设初始学习率为 0.1,milestones 为 [30, 80],gamma 为 0.1。

  • 在前30个 epoch 中,学习率保持在 0.1。
  • 在第31个 epoch,学习率变为 0.1 * 0.1 = 0.01。
  • 在第81个 epoch,学习率变为 0.01 * 0.1 = 0.001。

使用 MultiStepLR 可以使训练过程在初始阶段快速学习,而在后期逐步减少学习率,以更稳定地逼近最优解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值