Метод get_lr
Метод get_lr класса LRScheduler предназначен для получения текущего значения скорости обучения (learning rate) для каждой группы параметров оптимизатора. Этот метод полезен для мониторинга изменения скорости обучения в процессе тренировки, а также для реализации пользовательских стратегий изменения скорости обучения.
Метод возвращает список чисел с плавающей точкой, где каждый элемент соответствует скорости обучения для конкретной группы параметров. Если оптимизатор содержит только одну группу параметров, список будет состоять из одного элемента.
Синтаксис
scheduler.get_lr()
Возвращаемое значение
Метод возвращает список list значений скорости обучения для каждой группы параметров оптимизатора.
Пример
Рассмотрим базовое использование метода get_lr с планировщиком StepLR:
import torch
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
# Создаем модель и оптимизатор
model = torch.nn.Linear(10, 1)
optimizer = SGD(model.parameters(), lr=0.1)
# Создаем планировщик
scheduler = StepLR(optimizer, step_size=5, gamma=0.5)
# Получаем начальную скорость обучения
initial_lr = scheduler.get_lr()
print(f"Initial lr: {initial_lr}")
# Имитация обучения
for epoch in range(12):
# ... обучение ...
scheduler.step()
current_lr = scheduler.get_lr()
print(f"Epoch {epoch+1}: lr = {current_lr}")
Результат выполнения кода:
Initial lr: [0.1]
Epoch 1: lr = [0.1]
Epoch 2: lr = [0.1]
Epoch 3: lr = [0.1]
Epoch 4: lr = [0.1]
Epoch 5: lr = [0.05]
Epoch 6: lr = [0.05]
Epoch 7: lr = [0.05]
Epoch 8: lr = [0.05]
Epoch 9: lr = [0.05]
Epoch 10: lr = [0.025]
Epoch 11: lr = [0.025]
Epoch 12: lr = [0.025]
Пример
Использование метода get_lr с планировщиком ExponentialLR для отслеживания экспоненциального уменьшения скорости обучения:
import torch
from torch.optim import SGD
from torch.optim.lr_scheduler import ExponentialLR
torch.manual_seed(0)
# Создаем модель и оптимизатор
model = torch.nn.Linear(10, 1)
optimizer = SGD(model.parameters(), lr=0.1)
# Создаем планировщик с экспоненциальным затуханием
scheduler = ExponentialLR(optimizer, gamma=0.9)
# Отслеживаем изменение скорости обучения
lrs = []
for epoch in range(10):
lrs.append(scheduler.get_lr()[0])
scheduler.step()
print("Learning rates:", lrs)
Результат выполнения кода:
Learning rates: [0.1, 0.09, 0.08100000000000002, 0.07290000000000002, 0.06561, 0.05904900000000001, 0.0531441, 0.04782969000000001, 0.04304672100000001, 0.03874204890000001]
Пример
Использование метода get_lr с кастомным планировщиком для создания собственной логики изменения скорости обучения:
import torch
from torch.optim import SGD
from torch.optim.lr_scheduler import LambdaLR
# Создаем модель и оптимизатор
model = torch.nn.Linear(10, 1)
optimizer = SGD(model.parameters(), lr=0.1)
# Кастомная функция для расчета скорости обучения
def custom_lr(epoch):
return 1.0 / (epoch + 1.0)
# Создаем планировщик
scheduler = LambdaLR(optimizer, lr_lambda=custom_lr)
# Получаем скорости обучения для разных эпох
for epoch in range(5):
current_lr = scheduler.get_lr()
print(f"Epoch {epoch}: lr = {current_lr}")
scheduler.step()
Результат выполнения кода:
Epoch 0: lr = [0.1]
Epoch 1: lr = [0.05]
Epoch 2: lr = [0.03333333333333333]
Epoch 3: lr = [0.025]
Epoch 4: lr = [0.02]
Пример
Работа с методом get_lr при использовании разных скоростей обучения для разных групп параметров:
import torch
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
# Создаем модель с разными группами параметров
model = torch.nn.Sequential(
torch.nn.Linear(10, 5),
torch.nn.Linear(5, 1)
)
# Оптимизатор с разными скоростями для разных слоев
optimizer = SGD([
{'params': model[0].parameters(), 'lr': 0.01},
{'params': model[1].parameters(), 'lr': 0.001}
])
# Создаем планировщик
scheduler = StepLR(optimizer, step_size=3, gamma=0.5)
# Получаем скорости обучения для каждой группы
for epoch in range(7):
lrs = scheduler.get_lr()
print(f"Epoch {epoch}: lrs = {lrs}")
scheduler.step()
Результат выполнения кода:
Epoch 0: lrs = [0.01, 0.001]
Epoch 1: lrs = [0.01, 0.001]
Epoch 2: lrs = [0.01, 0.001]
Epoch 3: lrs = [0.005, 0.0005]
Epoch 4: lrs = [0.005, 0.0005]
Epoch 5: lrs = [0.005, 0.0005]
Epoch 6: lrs = [0.0025, 0.00025]
Смотрите также
-
класс
LRScheduler,
базовый класс для всех планировщиков скорости обучения -
метод
step,
обновляет скорость обучения согласно расписанию -
метод
get_last_lr,
возвращает последние вычисленные значения скорости обучения -
метод
state_dict,
сохраняет состояние планировщика в словарь