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

Класс StepLR

Класс StepLR является планировщиком скорости обучения в PyTorch. Он уменьшает скорость обучения оптимизатора на заданный коэффициент gamma каждые step_size эпох. Первый параметр принимает оптимизатор, второй параметр задает частоту уменьшения в эпохах.

Синтаксис

torch.optim.lr_scheduler.StepLR( optimizer, step_size, gamma=0.1, last_epoch=-1, verbose=False )

Пример

Давайте создадим простую модель и оптимизатор, а затем применим планировщик StepLR для снижения скорости обучения каждые 5 эпох:

import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(10, 1) optimizer = optim.SGD(model.parameters(), lr=0.1) scheduler = optim.lr_scheduler.StepLR( optimizer, step_size=5, gamma=0.5 ) for epoch in range(12): # обучение модели optimizer.step() scheduler.step() current_lr = optimizer.param_groups[0]['lr'] if epoch % 5 == 0: print(f'Эпоха {epoch}: lr = {current_lr}')

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

"Эпоха 0: lr = 0.1" "Эпоха 5: lr = 0.05" "Эпоха 10: lr = 0.025"

Пример

Используем StepLR с другими параметрами: уменьшаем скорость обучения на 10% каждые 2 эпохи и выводим сообщения о изменении:

import torch import torch.nn as nn import torch.optim as optim torch.manual_seed(0) model = nn.Linear(5, 2) optimizer = optim.Adam(model.parameters(), lr=0.01) scheduler = optim.lr_scheduler.StepLR( optimizer, step_size=2, gamma=0.9, verbose=True ) for epoch in range(6): optimizer.step() scheduler.step()

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

"Adjusting learning rate of group 0 to 9.0000e-03." "Adjusting learning rate of group 0 to 8.1000e-03." "Adjusting learning rate of group 0 to 7.2900e-03."

Пример

Планировщик StepLR можно использовать с любым оптимизатором. Покажем, как работает пошаговое уменьшение с оптимизатором SGD и коэффициентом gamma=0.1 при step_size=3:

import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(2, 2) optimizer = optim.SGD(model.parameters(), lr=1.0) scheduler = optim.lr_scheduler.StepLR( optimizer, step_size=3, gamma=0.1 ) lrs = [] for epoch in range(10): optimizer.step() scheduler.step() lrs.append(optimizer.param_groups[0]['lr']) print(f'Скорости обучения: {lrs}')

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

"Скорости обучения: [1.0, 1.0, 1.0, 0.1, 0.1, 0.1, 0.01, 0.01, 0.01, 0.001]"

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

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