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

Класс MultiStepLR

Класс MultiStepLR реализует многошаговое изменение скорости обучения. Первым параметром конструктор принимает оптимизатор, вторым параметром - список эпох, на которых происходит уменьшение скорости. Третьим параметром задаётся коэффициент умножения. Обычно используется для уменьшения скорости обучения на фиксированных этапах обучения.

Синтаксис

torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1)

Пример

Давайте создадим оптимизатор и планировщик, который будет уменьшать скорость обучения на 3-й и 6-й эпохах:

import torch from torch import nn model = nn.Linear(10, 1) optimizer = torch.optim.SGD(model.parameters(), lr=0.1) scheduler = torch.optim.lr_scheduler.MultiStepLR( optimizer, milestones=[3, 6], gamma=0.1, ) for epoch in range(8): scheduler.step() print(f'Epoch {epoch}: {scheduler.get_last_lr()[0]}')

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

Epoch 0: 0.1 Epoch 1: 0.1 Epoch 2: 0.1 Epoch 3: 0.01 Epoch 4: 0.01 Epoch 5: 0.01 Epoch 6: 0.001 Epoch 7: 0.001

Пример

Давайте создадим планировщик с коэффициентом уменьшения 0.5 на эпохах 2, 4 и 8:

import torch from torch import nn model = nn.Linear(10, 1) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) scheduler = torch.optim.lr_scheduler.MultiStepLR( optimizer, milestones=[2, 4, 8], gamma=0.5, ) for epoch in range(10): scheduler.step() print(f'Epoch {epoch}: {scheduler.get_last_lr()[0]}')

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

Epoch 0: 0.01 Epoch 1: 0.01 Epoch 2: 0.005 Epoch 3: 0.005 Epoch 4: 0.0025 Epoch 5: 0.0025 Epoch 6: 0.0025 Epoch 7: 0.0025 Epoch 8: 0.00125 Epoch 9: 0.00125

Пример

Давайте создадим планировщик, который уменьшает скорость обучения только для определённых параметров:

import torch from torch import nn model = nn.Sequential( nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 1), ) optimizer = torch.optim.SGD([ {'params': model[0].parameters(), 'lr': 0.1}, {'params': model[2].parameters(), 'lr': 0.01}, ]) scheduler = torch.optim.lr_scheduler.MultiStepLR( optimizer, milestones=[5, 10], gamma=0.5, ) for epoch in range(12): scheduler.step() lrs = scheduler.get_last_lr() print(f'Epoch {epoch}: {lrs}')

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

Epoch 0: [0.1, 0.01] Epoch 1: [0.1, 0.01] Epoch 2: [0.1, 0.01] Epoch 3: [0.1, 0.01] Epoch 4: [0.1, 0.01] Epoch 5: [0.05, 0.005] Epoch 6: [0.05, 0.005] Epoch 7: [0.05, 0.005] Epoch 8: [0.05, 0.005] Epoch 9: [0.05, 0.005] Epoch 10: [0.025, 0.0025] Epoch 11: [0.025, 0.0025]

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

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