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
相关产品推荐
相关产品推荐

