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

Класс ExponentialLR

Класс ExponentialLR является scheduler'ом из модуля torch.optim.lr_scheduler. Он позволяет умножать текущую скорость обучения на постоянный коэффициент gamma на каждом шаге. Параметр gamma должен быть меньше единицы для уменьшения скорости обучения. Первым параметром конструктор принимает объект оптимизатора, вторым - коэффициент затухания.

Синтаксис

torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1, verbose=False)

Параметры:

  • optimizer - оптимизатор, скорость обучения которого будет изменяться;
  • gamma - множитель, на который умножается текущая скорость обучения (должен быть меньше 1 для затухания);
  • last_epoch - номер последней эпохи (по умолчанию -1);
  • verbose - флаг вывода сообщений при изменении скорости обучения.

Пример с линейной моделью

Создадим простую линейную модель и оптимизатор SGD, затем применим экспоненциальное затухание:

import torch model = torch.nn.Linear(10, 1) optimizer = torch.optim.SGD(model.parameters(), lr=1.0) scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9) for epoch in range(5): optimizer.step() scheduler.step() print(f'Epoch {epoch}: lr = {optimizer.param_groups[0]["lr"]:.4f}')

Результат выполнения кода:

Epoch 0: lr = 0.9000 Epoch 1: lr = 0.8100 Epoch 2: lr = 0.7290 Epoch 3: lr = 0.6561 Epoch 4: lr = 0.5905

Пример с разными gamma

Сравним поведение скорости обучения при разных значениях коэффициента затухания:

import torch model1 = torch.nn.Linear(5, 2) optimizer1 = torch.optim.Adam(model1.parameters(), lr=1.0) scheduler1 = torch.optim.lr_scheduler.ExponentialLR(optimizer1, gamma=0.8) model2 = torch.nn.Linear(5, 2) optimizer2 = torch.optim.Adam(model2.parameters(), lr=1.0) scheduler2 = torch.optim.lr_scheduler.ExponentialLR(optimizer2, gamma=0.5) for epoch in range(6): scheduler1.step() scheduler2.step() print(f'Epoch {epoch}: gamma=0.8 -> {optimizer1.param_groups[0]["lr"]:.4f}, gamma=0.5 -> {optimizer2.param_groups[0]["lr"]:.4f}')

Результат выполнения кода:

Epoch 0: gamma=0.8 -> 0.8000, gamma=0.5 -> 0.5000 Epoch 1: gamma=0.8 -> 0.6400, gamma=0.5 -> 0.2500 Epoch 2: gamma=0.8 -> 0.5120, gamma=0.5 -> 0.1250 Epoch 3: gamma=0.8 -> 0.4096, gamma=0.5 -> 0.0625 Epoch 4: gamma=0.8 -> 0.3277, gamma=0.5 -> 0.0313 Epoch 5: gamma=0.8 -> 0.2621, gamma=0.5 -> 0.0156

Пример с пользовательской начальной эпохой

Параметр last_epoch позволяет задать начальный номер эпохи для продолжения обучения:

import torch model = torch.nn.Linear(10, 5) optimizer = torch.optim.SGD(model.parameters(), lr=0.1) scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95, last_epoch=10) for epoch in range(3): scheduler.step() print(f'Epoch {epoch}: lr = {optimizer.param_groups[0]["lr"]:.6f}')

Результат выполнения кода:

Epoch 0: lr = 0.063025 Epoch 1: lr = 0.059874 Epoch 2: lr = 0.056880

Смотрите также

  • класс StepLR,
    который уменьшает скорость обучения с фиксированным шагом
  • класс MultiStepLR,
    который уменьшает скорость обучения на заданных эпохах
  • класс CosineAnnealingLR,
    который использует косинусное затухание скорости обучения
  • класс ReduceLROnPlateau,
    который уменьшает скорость обучения при остановке улучшения метрики
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить