РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
520 of 769 menu

Метод 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,
    сохраняет состояние планировщика в словарь
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить