Класс ConstantLR
Класс ConstantLR представляет собой планировщик скорости обучения,
который умножает начальную скорость обучения на постоянный коэффициент factor
в течение первых total_iters эпох, а затем восстанавливает исходную скорость.
Параметр factor задаёт множитель в диапазоне от 0 до 1,
параметр total_iters определяет количество шагов, в течение которых применяется уменьшение.
Планировщик принимает оптимизатор и дополнительные параметры,
такие как last_epoch для возобновления обучения и verbose для вывода сообщений.
Синтаксис
torch.optim.lr_scheduler.ConstantLR(
optimizer,
factor=0.5,
total_iters=5,
last_epoch=-1,
verbose=False
)
Пример
Создадим простую модель и применим планировщик ConstantLR
с коэффициентом 0.5 на первых 5 эпохах:
import torch
model = torch.nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = torch.optim.lr_scheduler.ConstantLR(
optimizer,
factor=0.5,
total_iters=5
)
for epoch in range(10):
optimizer.step()
scheduler.step()
print(f'Epoch {epoch+1}: lr = {optimizer.param_groups[0]["lr"]:.4f}')
Результат выполнения кода:
Epoch 1: lr = 0.0500
Epoch 2: lr = 0.0500
Epoch 3: lr = 0.0500
Epoch 4: lr = 0.0500
Epoch 5: lr = 0.0500
Epoch 6: lr = 0.1000
Epoch 7: lr = 0.1000
Epoch 8: lr = 0.1000
Epoch 9: lr = 0.1000
Epoch 10: lr = 0.1000
Пример
Используем планировщик ConstantLR с коэффициентом 0.3
на протяжении 10 эпох для оптимизатора Adam:
import torch
torch.manual_seed(0)
model = torch.nn.Linear(5, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
scheduler = torch.optim.lr_scheduler.ConstantLR(
optimizer,
factor=0.3,
total_iters=10,
verbose=True
)
for epoch in range(12):
optimizer.step()
scheduler.step()
Результат выполнения кода:
"Adjusting learning rate of group 0 to 3.0000e-03."
Epoch 1: lr = 0.0030
Epoch 2: lr = 0.0030
Epoch 3: lr = 0.0030
Epoch 4: lr = 0.0030
Epoch 5: lr = 0.0030
Epoch 6: lr = 0.0030
Epoch 7: lr = 0.0030
Epoch 8: lr = 0.0030
Epoch 9: lr = 0.0030
Epoch 10: lr = 0.0030
Epoch 11: lr = 0.0100
Epoch 12: lr = 0.0100
Пример
Возобновим обучение с сохранённого состояния планировщика,
используя параметр last_epoch:
import torch
model = torch.nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.05)
scheduler = torch.optim.lr_scheduler.ConstantLR(
optimizer,
factor=0.5,
total_iters=8,
last_epoch=3
)
for epoch in range(5):
optimizer.step()
scheduler.step()
print(f'Epoch {epoch+1}: lr = {optimizer.param_groups[0]["lr"]:.4f}')
Результат выполнения кода:
Epoch 1: lr = 0.0250
Epoch 2: lr = 0.0250
Epoch 3: lr = 0.0250
Epoch 4: lr = 0.0250
Epoch 5: lr = 0.0500
Смотрите также
-
класс
StepLR,
который уменьшает скорость обучения с заданным шагом -
класс
ExponentialLR,
который экспоненциально уменьшает скорость обучения -
класс
LinearLR,
который линейно изменяет скорость обучения -
класс
MultiplicativeLR,
который умножает скорость обучения на заданную функцию