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

Класс SequentialLR

Класс SequentialLR из модуля torch.optim.lr_scheduler позволяет объединять несколько планировщиков скорости обучения в последовательную цепочку. Первый планировщик управляет скоростью обучения на начальном этапе, а по достижении указанного количества эпох или итераций управление передаётся следующему планировщику. В качестве первого параметра передаётся оптимизатор, вторым параметром - список планировщиков, третьим параметром - список границ переключения.

Синтаксис

torch.optim.lr_scheduler.SequentialLR( optimizer, schedulers, milestones, last_epoch=-1, verbose=False )

Параметры:

  • optimizer - оптимизатор, скорость обучения которого будет изменяться.
  • schedulers - список планировщиков, которые будут применяться последовательно.
  • milestones - список целых чисел, указывающих количество эпох, после которых происходит переход к следующему планировщику.
  • last_epoch - последняя эпоха (по умолчанию -1).
  • verbose - если True, выводит сообщения при каждом обновлении скорости обучения (по умолчанию False).

Пример

Давайте создадим последовательность из двух планировщиков: сначала StepLR, затем ExponentialLR:

import torch from torch.optim import SGD from torch.optim.lr_scheduler import StepLR, ExponentialLR, SequentialLR # Создаём модель и оптимизатор model = torch.nn.Linear(10, 1) optimizer = SGD(model.parameters(), lr=0.1) # Создаём планировщики scheduler1 = StepLR(optimizer, step_size=5, gamma=0.5) scheduler2 = ExponentialLR(optimizer, gamma=0.9) # Объединяем их в цепочку scheduler = SequentialLR( optimizer, schedulers=[scheduler1, scheduler2], milestones=[10] ) # Симулируем обучение на 15 эпох for epoch in range(1, 16): # ... шаг обучения ... scheduler.step() print(f"Эпоха {epoch}: lr = {optimizer.param_groups[0]['lr']:.6f}")

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

Эпоха 1: lr = 0.100000 Эпоха 2: lr = 0.100000 Эпоха 3: lr = 0.100000 Эпоха 4: lr = 0.100000 Эпоха 5: lr = 0.100000 Эпоха 6: lr = 0.050000 Эпоха 7: lr = 0.050000 Эпоха 8: lr = 0.050000 Эпоха 9: lr = 0.050000 Эпоха 10: lr = 0.050000 Эпоха 11: lr = 0.045000 Эпоха 12: lr = 0.040500 Эпоха 13: lr = 0.036450 Эпоха 14: lr = 0.032805 Эпоха 15: lr = 0.029525

Пример

Теперь создадим цепочку из трёх планировщиков с двумя границами переключения:

import torch from torch.optim import SGD from torch.optim.lr_scheduler import ( StepLR, ExponentialLR, CosineAnnealingLR, SequentialLR ) # Создаём модель и оптимизатор model = torch.nn.Linear(10, 1) optimizer = SGD(model.parameters(), lr=0.1) # Создаём три различных планировщика scheduler1 = StepLR(optimizer, step_size=5, gamma=0.5) scheduler2 = ExponentialLR(optimizer, gamma=0.95) scheduler3 = CosineAnnealingLR(optimizer, T_max=10) # Объединяем их в цепочку scheduler = SequentialLR( optimizer, schedulers=[scheduler1, scheduler2, scheduler3], milestones=[10, 20] ) # Симулируем обучение на 30 эпох for epoch in range(1, 31): scheduler.step() print(f"Эпоха {epoch:2d}: lr = {optimizer.param_groups[0]['lr']:.6f}")

Результат выполнения кода (фрагмент):

Эпоха 1: lr = 0.100000 Эпоха 2: lr = 0.100000 ... Эпоха 9: lr = 0.100000 Эпоха 10: lr = 0.100000 Эпоха 11: lr = 0.095000 ... Эпоха 19: lr = 0.066981 Эпоха 20: lr = 0.063632 Эпоха 21: lr = 0.097888 ... Эпоха 30: lr = 0.000000

Пример

Использование SequentialLR с флагом verbose для отладки:

import torch from torch.optim import SGD from torch.optim.lr_scheduler import StepLR, ExponentialLR, SequentialLR # Создаём модель и оптимизатор model = torch.nn.Linear(10, 1) optimizer = SGD(model.parameters(), lr=0.1) # Создаём планировщики с включённым verbose scheduler1 = StepLR(optimizer, step_size=5, gamma=0.5, verbose=True) scheduler2 = ExponentialLR(optimizer, gamma=0.9, verbose=True) # Объединяем их в цепочку scheduler = SequentialLR( optimizer, schedulers=[scheduler1, scheduler2], milestones=[10], verbose=True ) # Симулируем обучение на 12 эпох for epoch in range(1, 13): scheduler.step()

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

Epoch 5: reducing learning rate of group 0 to 5.0000e-02. Epoch 10: reducing learning rate of group 0 to 2.5000e-02. Epoch 11: reducing learning rate of group 0 to 2.2500e-02. Epoch 12: reducing learning rate of group 0 to 2.0250e-02.

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

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