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

Класс ChainedScheduler

Класс ChainedScheduler предназначен для объединения нескольких планировщиков скорости обучения в цепочку. Он принимает список планировщиков и применяет их последовательно: после того как первый планировщик завершает свою работу, управление передаётся следующему. Это полезно, когда нужно на разных этапах обучения использовать различные стратегии изменения скорости обучения. Первым параметром конструктор принимает список экземпляров планировщиков schedulers, а вторым параметром можно передать флаг last_epoch.

Синтаксис

torch.optim.lr_scheduler.ChainedScheduler(schedulers, last_epoch=-1)

Пример

Базовый пример использования двух планировщиков: сначала LinearLR, затем CosineAnnealingLR:

import torch from torch.optim import SGD from torch.optim.lr_scheduler import LinearLR, CosineAnnealingLR, ChainedScheduler model = torch.nn.Linear(10, 1) optimizer = SGD(model.parameters(), lr=0.1) scheduler1 = LinearLR(optimizer, start_factor=0.5, total_iters=3) scheduler2 = CosineAnnealingLR(optimizer, T_max=5) scheduler = ChainedScheduler([scheduler1, scheduler2]) for epoch in range(8): optimizer.step() print(f"Epoch {epoch}: lr = {optimizer.param_groups[0]['lr']:.4f}") scheduler.step()

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

Epoch 0: lr = 0.0500 Epoch 1: lr = 0.0750 Epoch 2: lr = 0.1000 Epoch 3: lr = 0.0809 Epoch 4: lr = 0.0309 Epoch 5: lr = 0.0000 Epoch 6: lr = 0.0309 Epoch 7: lr = 0.0809

Пример

Объединение трёх планировщиков: сначала линейное увеличение, затем постоянная скорость, затем экспоненциальное затухание:

import torch from torch.optim import SGD from torch.optim.lr_scheduler import LinearLR, ConstantLR, ExponentialLR, ChainedScheduler model = torch.nn.Linear(10, 1) optimizer = SGD(model.parameters(), lr=0.1) scheduler1 = LinearLR(optimizer, start_factor=0.1, total_iters=2) scheduler2 = ConstantLR(optimizer, factor=0.5, total_iters=2) scheduler3 = ExponentialLR(optimizer, gamma=0.8) scheduler = ChainedScheduler([scheduler1, scheduler2, scheduler3]) for epoch in range(8): optimizer.step() print(f"Epoch {epoch}: lr = {optimizer.param_groups[0]['lr']:.4f}") scheduler.step()

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

Epoch 0: lr = 0.0100 Epoch 1: lr = 0.0550 Epoch 2: lr = 0.0500 Epoch 3: lr = 0.0500 Epoch 4: lr = 0.0400 Epoch 5: lr = 0.0320 Epoch 6: lr = 0.0256 Epoch 7: lr = 0.0205

Пример

Применение ChainedScheduler с использованием MultiplicativeLR и CosineAnnealingWarmRestarts:

import torch from torch.optim import Adam from torch.optim.lr_scheduler import MultiplicativeLR, CosineAnnealingWarmRestarts, ChainedScheduler torch.manual_seed(0) model = torch.nn.Linear(10, 1) optimizer = Adam(model.parameters(), lr=0.01) lr_lambda = lambda epoch: 0.95 ** epoch scheduler1 = MultiplicativeLR(optimizer, lr_lambda=lr_lambda) scheduler2 = CosineAnnealingWarmRestarts(optimizer, T_0=3, T_mult=2) scheduler = ChainedScheduler([scheduler1, scheduler2]) for epoch in range(10): optimizer.step() print(f"Epoch {epoch}: lr = {optimizer.param_groups[0]['lr']:.6f}") scheduler.step()

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

Epoch 0: lr = 0.009500 Epoch 1: lr = 0.008530 Epoch 2: lr = 0.007462 Epoch 3: lr = 0.006479 Epoch 4: lr = 0.005531 Epoch 5: lr = 0.004647 Epoch 6: lr = 0.003673 Epoch 7: lr = 0.003053 Epoch 8: lr = 0.002432 Epoch 9: lr = 0.001819

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

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