Атрибут param_groups
Атрибут param_groups класса Optimizer предоставляет доступ
к списку групп параметров, которые оптимизируются. Каждая группа является
словарем, содержащим параметры модели и настройки оптимизации
(скорость обучения, коэффициент импульса и другие гиперпараметры).
Атрибут позволяет просматривать, изменять и добавлять группы параметров
напрямую, что дает гибкий контроль над процессом обучения.
Структура param_groups
Атрибут представляет собой список словарей. Каждый словарь содержит
ключ params со списком параметров тензоров и ключи с
гиперпараметрами (например, lr, momentum, weight_decay).
Рассмотрим структуру на примере оптимизатора SGD:
import torch
model = torch.nn.Linear(5, 3)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
print(optimizer.param_groups)
Результат выполнения кода:
[
{
'params': [Parameter containing: ...],
'lr': 0.01,
'momentum': 0,
'dampening': 0,
'weight_decay': 0,
'nesterov': False
}
]
Пример
Давайте создадим две группы параметров с разными скоростями обучения для разных слоев модели:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(10, 5),
torch.nn.Linear(5, 1)
)
param_groups = [
{'params': model[0].parameters(), 'lr': 0.01},
{'params': model[1].parameters(), 'lr': 0.001}
]
optimizer = torch.optim.SGD(param_groups, momentum=0.9)
for i, group in enumerate(optimizer.param_groups):
print(f"Group {i}: lr = {group['lr']}, num_params = {len(group['params'])}")
Результат выполнения кода:
Group 0: lr = 0.01, num_params = 2
Group 1: lr = 0.001, num_params = 2
Пример
Изменим скорость обучения для всех групп во время обучения:
import torch
model = torch.nn.Linear(5, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
print(f"Initial lr: {optimizer.param_groups[0]['lr']}")
for group in optimizer.param_groups:
group['lr'] = 0.01
print(f"Updated lr: {optimizer.param_groups[0]['lr']}")
Результат выполнения кода:
Initial lr: 0.1
Updated lr: 0.01
Пример
Добавим новую группу параметров в существующий оптимизатор
с помощью метода add_param_group:
import torch
model = torch.nn.Linear(10, 5)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
print(f"Number of groups before: {len(optimizer.param_groups)}")
new_params = torch.nn.Linear(5, 2).parameters()
optimizer.add_param_group({'params': new_params, 'lr': 0.001})
print(f"Number of groups after: {len(optimizer.param_groups)}")
print(f"New group lr: {optimizer.param_groups[1]['lr']}")
Результат выполнения кода:
Number of groups before: 1
Number of groups after: 2
New group lr: 0.001
Смотрите также
-
метод
add_param_group,
который добавляет новую группу параметров -
метод
state_dict,
который возвращает состояние оптимизатора -
метод
step,
который выполняет шаг оптимизации -
атрибут
defaults,
который содержит гиперпараметры по умолчанию