You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch中如何实现学习率线性衰减?已查阅LinearLR与ConstantLR文档仍存疑问

实现线性学习率衰减从0.1到0(或指定值)的方案

我明白你翻完PyTorch官方文档里的LinearLR和ConstantLR后还是有点摸不着头脑——其实完全不用复杂操作,LinearLR本身就能完美实现你要的10轮线性衰减需求,咱们直接上干货:

核心思路

你的需求很明确:10个训练轮次(epochs),初始学习率0.1,每轮降低0.01,最终到0。LinearLR的作用就是在指定步数内,把学习率从初始值线性调整到目标值,正好匹配你的场景。

完整代码示例

import torch
import torch.nn as nn
from torch.optim import SGD
from torch.optim.lr_scheduler import LinearLR

# 先搭个简单模型(替换成你自己的模型即可)
model = nn.Linear(10, 2)
# 初始化优化器,设置初始学习率0.1
optimizer = SGD(model.parameters(), lr=0.1)

# 关键:初始化LinearLR调度器
scheduler = LinearLR(
    optimizer,
    start_factor=1.0,  # 初始缩放因子:1.0表示保持原学习率0.1不变
    end_factor=0.0,    # 最终缩放因子:0.0表示学习率降到0
    total_iters=10     # 衰减总步数:正好对应10个epochs
)

# 模拟10个epoch的训练流程
for epoch in range(1, 11):
    # 这里写你的训练逻辑(前向传播、计算损失、反向传播、优化器step)
    # ...

    # 打印当前学习率,验证效果
    print(f"Epoch {epoch}, 当前学习率: {optimizer.param_groups[0]['lr']:.4f}")
    # 每个epoch结束后更新学习率
    scheduler.step()

运行这段代码,你会看到学习率从0.1开始,每轮递减0.01,到第10轮正好降到0.0000,完全符合你的要求。

调整为指定目标值(比如降到0.01)

如果你不想降到0,而是要降到某个指定值(比如0.01),只需要修改end_factor即可:

  • 目标学习率 = 初始学习率 × end_factor
  • 所以要降到0.01,end_factor = 0.01 / 0.1 = 0.1

修改后的调度器初始化代码:

scheduler = LinearLR(
    optimizer,
    start_factor=1.0,
    end_factor=0.1,  # 最终学习率变为0.1×0.1=0.01
    total_iters=10
)

常见疑问解释

可能你之前看文档困惑的点在于LinearLR的因子逻辑——它不是直接指定目标学习率,而是通过缩放因子来计算:每一步的学习率 = 初始学习率 × 当前因子,而因子会从start_factor线性变化到end_factor,共经过total_iters步。只要把这几个参数对应上你的需求,就能轻松实现线性衰减。

内容的提问来源于stack exchange,提问作者CutePoison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:09:05