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, verbose=False)[source] -
Устанавливает скорость обучения каждого параметра группы в соответствии с циклической политикой скорости обучения (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 -
verbose (bool) – Если
True, выводит сообщение в стандартный вывод для каждого обновления. По умолчанию:False.
Пример
>>> 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) >>> data_loader = torch.utils.data.DataLoader(...) >>> for epoch in range(10): >>> for batch in data_loader: >>> train_batch(...) >>> scheduler.step()
-
get_last_lr() -
Возвращает последнюю вычисленную скорость обучения текущим расписанием.
-
get_lr()[source] -
Вычисляет скорость обучения на итерации индекс. Эта функция рассматривает
self.last_epochкак индекс последней итерации.Если
self.cycle_momentumравноTrue, эта функция имеет побочный эффект обновления импульса оптимизатора.
-
load_state_dict(state_dict) -
Загружает состояние расписания.
- Параметры:
-
state_dict (dict) – состояние расписания. Должен быть объектом, возвращаемым функцией
state_dict().
-
print_lr(is_verbose, group, lr, epoch=None) -
Отображает текущую скорость обучения.
-
state_dict() -
Возвращает состояние расписания в виде
dict.Он содержит запись для каждой переменной в self.__dict__, которая не является оптимизатором.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.optim.lr_scheduler.CyclicLR.html