CyclicLR
-
class torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1)[исходный код] -
Устанавливает скорость обучения каждой группы параметров в соответствии с политикой циклической скорости обучения (CLR).
Политика циклически изменяет скорость обучения между двумя границами с постоянной частотой, как описано в статье Cyclical Learning Rates for Training Neural Networks. Расстояние между двумя границами можно масштабировать для каждой итерации или каждого цикла.
Политика циклической скорости обучения изменяет скорость обучения после каждого пакета.
stepследует вызывать после использования пакета для обучения.В этом классе реализованы три встроенные политики, описанные в статье:
- «triangular»: базовый треугольный цикл без масштабирования амплитуды.
- «triangular2»: базовый треугольный цикл, в котором начальная амплитуда уменьшается вдвое с каждым циклом.
- «exp_range»: цикл, в котором начальная амплитуда масштабируется на на каждой итерации цикла.
Эта реализация адаптирована из репозитория GitHub: bckenstler/CLR
- Параметры:
-
- optimizer (Optimizer) – Обёрнутый оптимизатор.
- base_lr (float или list) – Начальная скорость обучения, которая является нижней границей цикла для каждой группы параметров.
- max_lr (float или list) – Верхние границы скорости обучения в цикле для каждой группы параметров. Функционально этот параметр задаёт амплитуду цикла (max_lr - base_lr). Скорость обучения в любом цикле равна сумме base_lr и некоторого масштабированного значения амплитуды; поэтому, в зависимости от функции масштабирования, значение max_lr может фактически не достигаться.
- step_size_up (int) – Количество итераций обучения в возрастающей половине цикла. По умолчанию: 2000
- step_size_down (int) – Количество итераций обучения в убывающей половине цикла. Если step_size_down равен None, ему присваивается значение step_size_up. По умолчанию: None
- mode (str) – Одно из значений {triangular, triangular2, exp_range}. Значения соответствуют политикам, описанным выше. Если scale_fn не равен None, этот аргумент игнорируется. По умолчанию: ‘triangular’
- gamma (float) – Константа в функции масштабирования ‘exp_range’: gamma**(cycle iterations). По умолчанию: 1.0
- scale_fn (function) – Пользовательская политика масштабирования, задаваемая лямбда-функцией с одним аргументом, для которой 0 <= scale_fn(x) <= 1 при всех x >= 0. Если задана, параметр ‘mode’ игнорируется. По умолчанию: None
- scale_mode (str) – {‘cycle’, ‘iterations’}. Определяет, вычисляется ли scale_fn по номеру цикла или по числу итераций цикла (итераций обучения с начала цикла). По умолчанию: ‘cycle’
-
cycle_momentum (bool) – Если
True, моментум циклически изменяется в направлении, противоположном скорости обучения, между ‘base_momentum’ и ‘max_momentum’. По умолчанию: True - base_momentum (float или list) – Нижние границы моментума в цикле для каждой группы параметров. Обратите внимание, что моментум циклически изменяется в направлении, противоположном скорости обучения: на пике цикла моментум равен ‘base_momentum’, а скорость обучения — ‘max_lr’. По умолчанию: 0.8
- max_momentum (float или list) – Верхние границы моментума в цикле для каждой группы параметров. Функционально этот параметр задаёт амплитуду цикла (max_momentum - base_momentum). Моментум в любом цикле равен max_momentum за вычетом некоторого масштабированного значения амплитуды; поэтому, в зависимости от функции масштабирования, значение base_momentum может фактически не достигаться. Обратите внимание, что моментум циклически изменяется в направлении, противоположном скорости обучения: в начале цикла моментум равен ‘max_momentum’, а скорость обучения — ‘base_lr’. По умолчанию: 0.9
-
last_epoch (int) – Индекс последнего пакета. Этот параметр используется при возобновлении обучения. Поскольку
step()следует вызывать после каждого пакета, а не после каждой эпохи, это число обозначает общее количество обработанных пакетов, а не общее количество эпох. Если last_epoch=-1, расписание запускается с начала. По умолчанию: -1
Пример
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9) >>> scheduler = torch.optim.lr_scheduler.CyclicLR( ... optimizer, ... base_lr=0.01, ... max_lr=0.1, ... step_size_up=10, ... ) >>> data_loader = torch.utils.data.DataLoader(...) >>> for epoch in range(10): >>> for batch in data_loader: >>> train_batch(...) >>> scheduler.step()
-
get_last_lr()[исходный код] -
Возвращает последние скорости обучения, вычисленные этим планировщиком.
- Возвращает:
-
listскоростей обучения с элементами для каждойparam_groupsоптимизатора, имеющими те же типы, что и ихgroup["lr"]. - Тип возвращаемого значения:
Примечание
Возвращённые
Tensorявляются копиями и никогда не ссылаются наgroup["lr"]оптимизатора.
-
get_lr()[исходный код] -
Вычисляет следующую скорость обучения для каждой
param_groupsоптимизатора.Перемещает каждую
group["lr"]вparam_groupsоптимизатора по циклу междуbase_lrиmax_lrгруппы, используяscale_fn().- Возвращает:
-
listскоростей обучения для каждойparam_groupsоптимизатора, имеющих те же типы, что и их текущиеgroup["lr"]. - Тип возвращаемого значения:
Примечание
Чтобы узнать последнюю скорость обучения, используйте вместо этого
get_last_lr().Примечание
Возвращённые
Tensorявляются копиями и никогда не ссылаются наgroup["lr"]оптимизатора.Примечание
Этот метод рассматривает
last_epochкак индекс предыдущего пакета.Примечание
Если
cycle_momentumравноTrue, этот метод также обновляет моментум оптимизатора.
-
load_state_dict(state_dict)[исходный код] -
Загружает состояние планировщика.
-
scale_fn(x)[исходный код] -
Возвращает политику масштабирования.
- Тип возвращаемого значения:
-
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.CyclicLR.html