optimizer.param_groups 是 PyTorch 中优化器对象的一个属性,用于存储和管理优化器的参数组(parameter groups)。参数组是一个包含多个字典的列表,每个字典定义了优化器如何处理一组特定的参数。

具体内容

每个参数组(即列表中的每个字典)通常包含以下键值对:

  • 'params': 一个包含需要优化的参数的列表(通常是模型的参数)。
  • 'lr': 学习率(learning rate),用于控制参数更新的步长。
  • 其他优化器特定的参数,如 'weight_decay'(权重衰减)、'momentum'(动量)等。

示例

假设你有一个简单的模型和一个优化器:

import torch
import torch.nn as nn
import torch.optim as optim

# 定义一个简单的模型
model = nn.Sequential(
    nn.Linear(10, 50),
    nn.ReLU(),
    nn.Linear(50, 1)
)

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

此时,optimizer.param_groups 可能看起来像这样:

[{'params': [<torch.Tensor of size 50x10>, <torch.Tensor of size 1x50>],
  'lr': 0.01,
  'momentum': 0.9,
  'dampening': 0,
  'weight_decay': 0,
  'nesterov': False}]

修改参数组

你可以通过直接修改 optimizer.param_groups 来动态调整优化器的行为。例如,如果你想在训练过程中改变学习率,可以这样做:

for param_group in optimizer.param_groups:
    param_group['lr'] = 0.001  # 将学习率改为 0.001

多个参数组

你还可以为不同的参数组设置不同的优化器参数。例如:

optimizer = optim.SGD([
    {'params': model[0].parameters(), 'lr': 0.01},
    {'params': model[2].parameters(), 'lr': 0.001}
], momentum=0.9)

在这种情况下,optimizer.param_groups 将包含两个字典,每个字典对应一个参数组,每个组可以有不同的学习率和其他参数。

总结

optimizer.param_groups 是一个非常有用的工具,允许你灵活地控制优化器的行为,特别是在需要为不同的参数组设置不同的优化策略时。