Метод get_last_lr
Метод get_last_lr класса LRScheduler возвращает
список скоростей обучения, которые были установлены на последнем
шаге обновления. Этот метод полезен для отслеживания текущих
значений скорости обучения во время тренировки, особенно
при использовании динамических стратегий изменения скорости
обучения. Метод не принимает никаких параметров и возвращает
список чисел с плавающей запятой для каждой группы параметров.
Синтаксис
last_lr = scheduler.get_last_lr()
Пример
Создадим модель и оптимизатор, а затем с помощью планировщика
StepLR получим последние значения скорости обучения:
import torch
import torch.nn as nn
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
model = nn.Linear(10, 5)
optimizer = SGD(model.parameters(), lr=0.1)
scheduler = StepLR(optimizer, step_size=10, gamma=0.5)
last_lr = scheduler.get_last_lr()
print(last_lr)
Результат выполнения кода:
[0.1]
Изначально скорость обучения равна базовой,
так как метод step ещё не вызывался.
Пример
Вызовем метод step несколько раз, чтобы изменить
скорость обучения, и в конце получим последнее значение
с помощью метода get_last_lr:
import torch
import torch.nn as nn
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
model = nn.Linear(10, 5)
optimizer = SGD(model.parameters(), lr=0.1)
scheduler = StepLR(optimizer, step_size=3, gamma=0.5)
for epoch in range(5):
scheduler.step()
print(f'Epoch {epoch+1}: last_lr = {scheduler.get_last_lr()}')
Результат выполнения кода:
Epoch 1: last_lr = [0.1]
Epoch 2: last_lr = [0.1]
Epoch 3: last_lr = [0.1]
Epoch 4: last_lr = [0.05]
Epoch 5: last_lr = [0.05]
Скорость обучения меняется только на эпохах, кратных шагу в 3 эпохи.
Пример
Рассмотрим использование метода get_last_lr
с планировщиком CosineAnnealingLR, который
изменяет скорость обучения по косинусоидальному закону:
import torch
import torch.nn as nn
from torch.optim import SGD
from torch.optim.lr_scheduler import CosineAnnealingLR
torch.manual_seed(0)
model = nn.Linear(10, 5)
optimizer = SGD(model.parameters(), lr=0.1)
scheduler = CosineAnnealingLR(optimizer, T_max=10)
for epoch in range(5):
scheduler.step()
print(f'Epoch {epoch+1}: last_lr = {scheduler.get_last_lr()}')
Результат выполнения кода:
Epoch 1: last_lr = [0.09755283646308996]
Epoch 2: last_lr = [0.09045084971874737]
Epoch 3: last_lr = [0.07938929611518898]
Epoch 4: last_lr = [0.06545084971874738]
Epoch 5: last_lr = [0.05]
Метод get_last_lr возвращает текущие значения
скорости обучения после каждого вызова step.
Пример
При использовании нескольких групп параметров
метод get_last_lr возвращает список значений
для каждой группы:
import torch
import torch.nn as nn
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
model = nn.Sequential(
nn.Linear(10, 5),
nn.Linear(5, 3)
)
optimizer = SGD([
{'params': model[0].parameters(), 'lr': 0.1},
{'params': model[1].parameters(), 'lr': 0.01}
])
scheduler = StepLR(optimizer, step_size=5, gamma=0.1)
scheduler.step()
last_lr = scheduler.get_last_lr()
print(last_lr)
Результат выполнения кода:
[0.1, 0.01]
Список содержит по одному значению для каждой группы параметров в том же порядке.
Смотрите также
-
класс
LRScheduler,
который является базовым для всех планировщиков скорости обучения -
метод
step,
который обновляет скорость обучения и вызывает изменение -
метод
get_lr,
который вычисляет новую скорость обучения для следующего шага -
метод
state_dict,
который сохраняет состояние планировщика для дальнейшего восстановления