Spec-Zone.ru › PyTorch 2.14

OneCycleLR

class torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=-1) [исходный код]

Устанавливает скорость обучения каждой группы параметров в соответствии с политикой скорости обучения 1cycle.

Политика 1cycle постепенно изменяет скорость обучения: от начальной до некоторой максимальной, а затем от максимальной до минимальной, которая значительно ниже начальной. Эта политика впервые была описана в статье Сверхсходимость: очень быстрое обучение нейронных сетей с использованием больших скоростей обучения.

Политика скорости обучения 1cycle изменяет скорость обучения после каждого пакета. step следует вызывать после использования пакета для обучения.

Этот планировщик нельзя использовать в цепочке.

Обратите также внимание, что общее количество шагов цикла можно определить одним из двух способов (перечислены в порядке приоритета):

  1. Явно задано значение total_steps.
  2. Заданы количество эпох (epochs) и количество шагов на эпоху (steps_per_epoch). В этом случае общее количество шагов вычисляется по формуле total_steps = epochs * steps_per_epoch

Необходимо задать либо значение total_steps, либо значения и epochs, и steps_per_epoch.

По умолчанию этот планировщик работает так же, как реализация 1cycle в fastai, в которой утверждается, что «неопубликованные результаты показали, что при использовании только двух фаз результаты ещё лучше». Чтобы воспроизвести поведение исходной статьи, установите three_phase=True.

Параметры:
  • optimizer (Optimizer) – Оборачиваемый оптимизатор.
  • max_lr (float or list) – Верхние границы скорости обучения в цикле для каждой группы параметров.
  • total_steps (int) – Общее количество шагов в цикле. Если это значение не задано, его необходимо вычислить, указав значения epochs и steps_per_epoch. По умолчанию: None
  • epochs (int) – Количество эпох обучения. Используется вместе с steps_per_epoch для вычисления общего количества шагов в цикле, если значение total_steps не задано. По умолчанию: None
  • steps_per_epoch (int) – Количество шагов обучения на эпоху. Используется вместе с epochs для вычисления общего количества шагов в цикле, если значение total_steps не задано. По умолчанию: None
  • pct_start (float) – Доля цикла (в количестве шагов), в течение которой скорость обучения повышается. По умолчанию: 0.3
  • anneal_strategy (str) – {‘cos’, ‘linear’} Стратегия изменения скорости обучения: «cos» — косинусное изменение, «linear» — линейное. По умолчанию: ‘cos’
  • cycle_momentum (bool) – Если True, момент импульса циклически изменяется обратно пропорционально скорости обучения между ‘base_momentum’ и ‘max_momentum’. По умолчанию: True
  • base_momentum (float or list) – Нижние границы момента импульса в цикле для каждой группы параметров. Обратите внимание, что момент импульса циклически изменяется обратно пропорционально скорости обучения: в пике цикла момент импульса равен ‘base_momentum’, а скорость обучения — ‘max_lr’. По умолчанию: 0.85
  • max_momentum (float or list) – Верхние границы момента импульса в цикле для каждой группы параметров. Фактически этот параметр определяет амплитуду цикла (max_momentum - base_momentum). Обратите внимание, что момент импульса циклически изменяется обратно пропорционально скорости обучения: в начале цикла момент импульса равен ‘max_momentum’, а скорость обучения — ‘base_lr’. По умолчанию: 0.95
  • div_factor (float) – Определяет начальную скорость обучения по формуле initial_lr = max_lr/div_factor. По умолчанию: 25
  • final_div_factor (float) – Определяет минимальную скорость обучения по формуле min_lr = initial_lr/final_div_factor. По умолчанию: 1e4
  • three_phase (bool) – Если True, используйте третью фазу расписания, чтобы снизить скорость обучения до нуля в соответствии с ‘final_div_factor’, вместо изменения второй фазы (первые две фазы будут симметричны относительно шага, заданного параметром ‘pct_start’).
  • last_epoch (int) – Индекс последнего пакета. Этот параметр используется при возобновлении обучения. Поскольку step() следует вызывать после каждого пакета, а не после каждой эпохи, это число обозначает общее количество обработанных пакетов, а не эпох. Если last_epoch=-1, расписание начинается с начала. По умолчанию: -1

Пример

>>> data_loader = torch.utils.data.DataLoader(...)
>>> optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, momentum=0.9)
>>> scheduler = torch.optim.lr_scheduler.OneCycleLR(
...     optimizer, max_lr=0.01, steps_per_epoch=len(data_loader), epochs=10
... )
>>> for epoch in range(10):
>>>     for batch in data_loader:
>>>         train_batch(...)
>>>         optimizer.step()
>>>         scheduler.step()
../_images/OneCycleLR.png
get_last_lr() [исходный код]

Возвращает последние значения скорости обучения, вычисленные этим планировщиком.

Возвращает:

list значений скорости обучения, содержащий запись для каждой param_groups оптимизатора и имеющий те же типы, что и их group["lr"].

Тип возвращаемого значения:

list[float | Tensor]

Примечание

Возвращаемые Tensor являются копиями и не ссылаются на те же данные, что и group["lr"] оптимизатора.

get_lr() [исходный код]

Вычисляет следующую скорость обучения для каждой param_groups оптимизатора.

Находит соответствующую запись _schedule_phases для текущего шага и выполняет интерполяцию между её start_lr и end_lr с использованием _anneal_func().

Возвращает:

list значений скорости обучения для каждой param_groups оптимизатора; типы значений совпадают с типами их текущих group["lr"].

Тип возвращаемого значения:

list[float | Tensor]

Примечание

Чтобы просмотреть последнее значение скорости обучения, используйте вместо этого get_last_lr().

Примечание

Возвращаемые Tensor являются копиями и не ссылаются на те же данные, что и group["lr"] оптимизатора.

Примечание

Если cycle_momentum равно True, этот метод также обновляет момент импульса оптимизатора.

load_state_dict(state_dict) [исходный код]

Загружает состояние планировщика.

Параметры:

state_dict (dict) – состояние планировщика. Должен быть объектом, возвращённым вызовом state_dict().

state_dict() [исходный код]

Возвращает состояние планировщика в виде dict.

Оно содержит запись для каждой переменной в self.__dict__, кроме оптимизатора.

Тип возвращаемого значения:

dict[str, Any]

step(epoch=None) [исходный код]

Выполняет шаг планировщика.

Параметры:

epoch (int, необязательный) –

Устарело начиная с версии 1.4: Если указано, устанавливает last_epoch в значение epoch и использует _get_closed_form_lr(), если он доступен. Этот параметр поддерживается не во всех случаях. Вместо этого вызывайте step() без аргументов.

Примечание

Вызывайте этот метод после вызова step() оптимизатора.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.optim.lr_scheduler.OneCycleLR.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API