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
是一个非常有用的工具,允许你灵活地控制优化器的行为,特别是在需要为不同的参数组设置不同的优化策略时。