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

PyTorch中如何为不同参数组配置不同的学习率调度器?

为不同参数组设置不同指数学习率衰减

要实现不同参数组使用不同的指数衰减率(gamma),不能直接用ExponentialLR(它会对所有参数组应用相同的gamma),可以用PyTorch提供的MultiplicativeLR调度器,它支持为每个参数组自定义衰减因子。

核心思路

MultiplicativeLR允许传入一个lambda函数,该函数接收参数组的索引或参数组本身作为输入,返回对应的学习率乘法因子(即你需要的gamma值),以此实现不同参数组的独立衰减。

完整实现代码

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import MultiplicativeLR

# 定义模型
class NN1(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(10, 1)

class NN2(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(10, 1)

# 初始化模型和优化器
module1 = NN1()
module2 = NN2()

criterion = nn.MSELoss()
optimizer = torch.optim.Adam([ 
                {'params': module1.parameters(), 'lr':0.2},
                {'params': module2.parameters(), 'lr': 0.1}
            ])

# 定义调度器:为不同参数组设置不同gamma
# 通过参数组索引区分,0对应module1,1对应module2
scheduler = MultiplicativeLR(
    optimizer,
    lr_lambda=lambda idx: 0.8 if idx == 0 else 0.9,
    verbose=True
)

# 训练循环示例
for epoch in range(5):
    # 模拟训练流程
    inputs = torch.randn(32, 10)
    target1 = torch.randn(32, 1)
    target2 = torch.randn(32, 1)
    
    optimizer.zero_grad()
    output1 = module1(inputs)
    output2 = module2(inputs)
    loss = criterion(output1, target1) + criterion(output2, target2)
    loss.backward()
    optimizer.step()
    
    # 更新学习率
    scheduler.step()
    print(f"Epoch {epoch+1}, 当前学习率: {[round(group['lr'], 6) for group in optimizer.param_groups]}")

更灵活的写法(不依赖参数组顺序)

如果担心参数组顺序变化导致错误,可以在定义优化器时给每个参数组添加自定义gamma键,再通过lambda函数读取该值:

# 优化器定义时添加gamma标识
optimizer = torch.optim.Adam([ 
                {'params': module1.parameters(), 'lr':0.2, 'gamma':0.8},
                {'params': module2.parameters(), 'lr': 0.1, 'gamma':0.9}
            ])

# 调度器直接读取参数组的gamma值
scheduler = MultiplicativeLR(
    optimizer,
    lr_lambda=lambda group: group['gamma'],
    verbose=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:10:27