Метод add_param_group
Метод add_param_group класса Optimizer
позволяет добавлять новую группу параметров в уже
созданный оптимизатор. Это полезно, когда модель
изменяется динамически, например, добавляются новые
слои или параметры во время обучения. Первым и
единственным параметром метод принимает словарь
с конфигурацией новой группы параметров.
Синтаксис
optimizer.add_param_group(param_group)
Пример
Давайте создадим оптимизатор для одной группы параметров, а затем добавим вторую группу:
import torch
model = torch.nn.Linear(5, 3)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
new_params = torch.nn.Parameter(torch.randn(2, 3))
optimizer.add_param_group({'params': new_params, 'lr': 0.001})
print(len(optimizer.param_groups))
Результат выполнения кода:
2
Пример
Добавим новую группу параметров с индивидуальной скоростью обучения и моментом:
import torch
model = torch.nn.Sequential(
torch.nn.Linear(10, 20),
torch.nn.ReLU(),
torch.nn.Linear(20, 5)
)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
new_layer = torch.nn.Linear(5, 2)
optimizer.add_param_group({
'params': new_layer.parameters(),
'lr': 0.01,
'betas': (0.9, 0.999)
})
print(optimizer.param_groups[0]['lr'])
print(optimizer.param_groups[1]['lr'])
Результат выполнения кода:
0.001
0.01
Пример
Используем метод для добавления новых параметров во время обучения модели:
import torch
torch.manual_seed(0)
model = torch.nn.Linear(5, 3)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(2):
x = torch.randn(1, 5)
y = model(x)
loss = y.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch == 1:
new_param = torch.nn.Parameter(torch.randn(2, 3))
optimizer.add_param_group({'params': new_param, 'lr': 0.005})
print(len(optimizer.param_groups))
Результат выполнения кода:
2
Смотрите также
-
класс
Optimizer,
базовый класс для всех оптимизаторов -
метод
step,
выполняет обновление параметров модели -
метод
zero_grad,
обнуляет градиенты параметров -
атрибут
param_groups,
возвращает список групп параметров оптимизатора