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

Класс LinearLR

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

Синтаксис

torch.optim.lr_scheduler.LinearLR( optimizer, start_factor=1.0 / 3, end_factor=1.0, total_iters=5, last_epoch=-1, verbose=False )

Параметры

Обязательные параметры:

  • optimizer - оптимизатор, для которого будет изменяться скорость обучения

Необязательные параметры:

  • start_factor - множитель для начальной скорости обучения, по умолчанию 1.0/3.0
  • end_factor - множитель для конечной скорости обучения, по умолчанию 1.0
  • total_iters - количество шагов, в течение которых скорость обучения изменяется линейно, по умолчанию 5
  • last_epoch - индекс последней эпохи, по умолчанию -1
  • verbose - если True, выводит сообщение при каждом изменении скорости, по умолчанию False

Пример

Давайте создадим простую модель и оптимизатор с начальной скоростью обучения 1.0, а затем применим линейное изменение скорости обучения в течение 10 эпох от начального значения до значения, умноженного на 0.1:

import torch import torch.nn as nn from torch.optim.lr_scheduler import LinearLR model = nn.Linear(10, 1) optimizer = torch.optim.SGD(model.parameters(), lr=1.0) scheduler = LinearLR( optimizer, start_factor=1.0, end_factor=0.1, total_iters=10 ) for epoch in range(12): optimizer.step() current_lr = optimizer.param_groups[0]['lr'] print(f"Epoch {epoch}: lr = {current_lr:.4f}") scheduler.step()

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

Epoch 0: lr = 1.0000 Epoch 1: lr = 0.9100 Epoch 2: lr = 0.8200 Epoch 3: lr = 0.7300 Epoch 4: lr = 0.6400 Epoch 5: lr = 0.5500 Epoch 6: lr = 0.4600 Epoch 7: lr = 0.3700 Epoch 8: lr = 0.2800 Epoch 9: lr = 0.1900 Epoch 10: lr = 0.1000 Epoch 11: lr = 0.1000

Пример

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

import torch import torch.nn as nn from torch.optim.lr_scheduler import LinearLR model = nn.Linear(10, 1) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) scheduler = LinearLR( optimizer, start_factor=0.2, end_factor=1.0, total_iters=5 ) for epoch in range(8): optimizer.step() current_lr = optimizer.param_groups[0]['lr'] print(f"Epoch {epoch}: lr = {current_lr:.6f}") scheduler.step()

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

Epoch 0: lr = 0.002000 Epoch 1: lr = 0.003600 Epoch 2: lr = 0.005200 Epoch 3: lr = 0.006800 Epoch 4: lr = 0.008400 Epoch 5: lr = 0.010000 Epoch 6: lr = 0.010000 Epoch 7: lr = 0.010000

Пример

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

import torch import torch.nn as nn from torch.optim.lr_scheduler import LinearLR model = nn.Sequential( nn.Linear(5, 10), nn.ReLU(), nn.Linear(10, 1) ) optimizer = torch.optim.Adam(model.parameters(), lr=0.5) scheduler = LinearLR( optimizer, start_factor=1.0, end_factor=0.2, total_iters=3 ) for epoch in range(6): optimizer.step() current_lr = optimizer.param_groups[0]['lr'] print(f"Epoch {epoch}: lr = {current_lr:.4f}") scheduler.step()

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

Epoch 0: lr = 0.5000 Epoch 1: lr = 0.3667 Epoch 2: lr = 0.2333 Epoch 3: lr = 0.1000 Epoch 4: lr = 0.1000 Epoch 5: lr = 0.1000

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

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