Снижение скорости по эпохам в PyTorch
Скорость обучения можно менять
по расписанию. Класс StepLR
через несколько эпох умножает
скорость у связанного
оптимизатора на заданный
множитель меньше единицы.
Создадим спуск и расписание, выведем скорость, выполним три эпохи с шагом оптимизатора и снова прочитаем скорость:
import torch
import torch.nn as nn
model = nn.Linear(2, 1)
optimizer = torch.optim.SGD(
model.parameters(),
lr=0.1,
)
scheduler = torch.optim.lr_scheduler.StepLR(
optimizer,
step_size=3,
gamma=0.5,
)
print(scheduler.get_last_lr()[0]) # выведет 0.1
for _ in range(3):
x = torch.randn(1, 2)
optimizer.zero_grad()
model(x).sum().backward()
optimizer.step()
scheduler.step()
print(scheduler.get_last_lr()[0]) # выведет 0.05
Подключите к спуску со
скоростью 0.2 расписание,
которое каждые 2 эпохи
умножает скорость на 0.25.
После четырёх вызовов шага
у расписания выведите текущую
скорость.
Создайте линейный слой и
оптимизатор со скоростью
0.01. Свяжите его
с правилом: через 5
эпох скорость делится пополам.
Выведите скорость до первого
шага расписания и после пяти
таких шагов.
Возьмите скорость 1.0
и расписание с интервалом
1 эпоха и множителем
0.9. Сделайте три
шага расписания после
шагов оптимизатора и выведите
итоговую скорость с точностью
до трёх знаков после запятой.