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следует вызывать после использования пакета для обучения.Этот планировщик нельзя использовать в цепочке.
Обратите также внимание, что общее количество шагов цикла можно определить одним из двух способов (перечислены в порядке приоритета):
- Явно задано значение total_steps.
- Заданы количество эпох (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()
-
get_last_lr()[исходный код] -
Возвращает последние значения скорости обучения, вычисленные этим планировщиком.
- Возвращает:
-
listзначений скорости обучения, содержащий запись для каждойparam_groupsоптимизатора и имеющий те же типы, что и ихgroup["lr"]. - Тип возвращаемого значения:
Примечание
Возвращаемые
Tensorявляются копиями и не ссылаются на те же данные, что иgroup["lr"]оптимизатора.
-
get_lr()[исходный код] -
Вычисляет следующую скорость обучения для каждой
param_groupsоптимизатора.Находит соответствующую запись
_schedule_phasesдля текущего шага и выполняет интерполяцию между еёstart_lrиend_lrс использованием_anneal_func().- Возвращает:
-
listзначений скорости обучения для каждойparam_groupsоптимизатора; типы значений совпадают с типами их текущихgroup["lr"]. - Тип возвращаемого значения:
Примечание
Чтобы просмотреть последнее значение скорости обучения, используйте вместо этого
get_last_lr().Примечание
Возвращаемые
Tensorявляются копиями и не ссылаются на те же данные, что иgroup["lr"]оптимизатора.Примечание
Если
cycle_momentumравноTrue, этот метод также обновляет момент импульса оптимизатора.
-
load_state_dict(state_dict)[исходный код] -
Загружает состояние планировщика.
- Параметры:
-
state_dict (dict) – состояние планировщика. Должен быть объектом, возвращённым вызовом
state_dict().
-
state_dict()[исходный код] -
Возвращает состояние планировщика в виде
dict.Оно содержит запись для каждой переменной в
self.__dict__, кроме оптимизатора.
-
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