Атрибут defaults
Атрибут defaults класса Optimizer представляет собой словарь,
содержащий параметры оптимизации, которые применяются ко всем группам параметров
по умолчанию. К таким параметрам обычно относятся скорость обучения
lr, коэффициент импульса momentum, коэффициент затухания весов
weight_decay и другие. Значения этого словаря задаются при создании
экземпляра оптимизатора и используются для групп параметров, для которых не
были указаны собственные переопределяющие параметры.
Этот атрибут удобен для задания общих настроек обучения, а также для их быстрого изменения в процессе работы. Он доступен только для чтения, однако его содержимое можно изменять напрямую, что повлияет на все группы параметров, использующие значения по умолчанию.
Синтаксис
optimizer.defaults
Где optimizer - экземпляр класса оптимизатора.
Атрибут возвращает словарь с параметрами по умолчанию.
Пример
Давайте создадим оптимизатор SGD и выведем его атрибут defaults:
import torch
model = torch.nn.Linear(5, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
print(optimizer.defaults)
Результат выполнения кода:
{
'lr': 0.01,
'momentum': 0.9,
'dampening': 0,
'weight_decay': 0,
'nesterov': False,
'maximize': False,
'foreach': None,
'differentiable': False,
}
В выводе мы видим все параметры, которые были установлены по умолчанию
для оптимизатора SGD.
Пример
Изменим значение скорости обучения по умолчанию через атрибут defaults
и проверим, как это повлияет на группы параметров:
import torch
model = torch.nn.Linear(5, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
print("До изменения:", optimizer.defaults['lr'])
optimizer.defaults['lr'] = 0.01
print("После изменения:", optimizer.defaults['lr'])
for param_group in optimizer.param_groups:
print("lr в группе:", param_group['lr'])
Результат выполнения кода:
"До изменения: 0.001"
"После изменения: 0.01"
"lr в группе: 0.01"
Как видно из примера, изменение defaults['lr'] автоматически обновило
скорость обучения для группы параметров, которая не имела собственного
переопределяющего значения.
Пример
Рассмотрим ситуацию, когда для одной из групп параметров задано собственное
значение lr. Изменение атрибута defaults не повлияет на эту группу:
import torch
model = torch.nn.Linear(5, 1)
special_params = list(model.parameters())[:1]
optimizer = torch.optim.SGD([
{'params': special_params, 'lr': 0.1},
{'params': list(model.parameters())[1:]},
], lr=0.01)
print("Исходный defaults['lr']:", optimizer.defaults['lr'])
print("lr первой группы:", optimizer.param_groups[0]['lr'])
print("lr второй группы:", optimizer.param_groups[1]['lr'])
optimizer.defaults['lr'] = 0.001
print("\nПосле изменения defaults:")
print("defaults['lr']:", optimizer.defaults['lr'])
print("lr первой группы:", optimizer.param_groups[0]['lr'])
print("lr второй группы:", optimizer.param_groups[1]['lr'])
Результат выполнения кода:
"Исходный defaults['lr']: 0.01"
"lr первой группы: 0.1"
"lr второй группы: 0.01"
"\nПосле изменения defaults:"
"defaults['lr']: 0.001"
"lr первой группы: 0.1"
"lr второй группы: 0.001"
В этом примере первая группа параметров имеет собственное значение lr,
поэтому изменение defaults не затронуло её. Вторая группа использует
значение по умолчанию, поэтому её lr изменилось.
Смотрите также
-
класс
Optimizer,
который является базовым для всех оптимизаторов в PyTorch -
атрибут
param_groups,
который содержит список групп параметров с их индивидуальными настройками -
метод
add_param_group,
который добавляет новую группу параметров с возможностью переопределения настроек -
метод
state_dict,
который сохраняет состояние оптимизатора, включая параметры по умолчанию