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 (Оптимизатор) – Оборачиваемый оптимизатор.
- base_lr (float или список) – Начальная скорость обучения, которая является нижней границей цикла для каждой группы параметров.
- max_lr (float или список) – Верхние границы скорости обучения в цикле для каждой группы параметров. Функционально, это определяет амплитуду цикла (max_lr - base_lr). Скорость обучения в любой момент цикла является суммой base_lr и некоторого масштабирования амплитуды; поэтому max_lr может фактически не достигаться в зависимости от функции масштабирования.
- step_size_up (целое число) – Количество итераций обучения в возрастающей половине цикла. По умолчанию: 2000
- step_size_down (целое число) – Количество итераций обучения в убывающей половине цикла. Если step_size_down равно None, оно устанавливается в step_size_up. По умолчанию: None
- mode (строка) – Одно из {triangular, triangular2, exp_range}. Значения соответствуют политикам, описанным выше. Если scale_fn не равно None, этот аргумент игнорируется. По умолчанию: ‘triangular’
- gamma (float) – Константа в функции масштабирования ‘exp_range’: gamma**(cycle iterations) По умолчанию: 1.0
- scale_fn (функция) – Пользовательская политика масштабирования, определенная лямбда-функцией с одним аргументом, где 0 <= scale_fn(x) <= 1 для всех x >= 0. Если указано, то ‘mode’ игнорируется. По умолчанию: None
- scale_mode (строка) – {‘cycle’, ‘iterations’}. Определяет, вычисляется ли scale_fn по номеру цикла или по итерациям цикла (итерации обучения с начала цикла). По умолчанию: ‘cycle’
-
cycle_momentum (булево) – Если
True, импульс циклически изменяется обратно скорости обучения между ‘base_momentum’ и ‘max_momentum’. По умолчанию: True - base_momentum (float или список) – Нижние границы импульса в цикле для каждой группы параметров. Обратите внимание, что импульс циклически изменяется обратно скорости обучения; в пике цикла импульс равен ‘base_momentum’, а скорость обучения равна ‘max_lr’. По умолчанию: 0.8
- max_momentum (float или список) – Верхние границы импульса в цикле для каждой группы параметров. Функционально, это определяет амплитуду цикла (max_momentum - base_momentum). Импульс в любой момент цикла является разницей max_momentum и некоторого масштабирования амплитуды; поэтому base_momentum может фактически не достигаться в зависимости от функции масштабирования. Обратите внимание, что импульс циклически изменяется обратно скорости обучения; в начале цикла импульс равен ‘max_momentum’, а скорость обучения равна ‘base_lr’ По умолчанию: 0.9
-
last_epoch (целое число) – Индекс последней партии. Этот параметр используется при возобновлении работы обучения. Поскольку
step()следует вызывать после каждой партии, а не после каждой эпохи, это число представляет общее количество парт, а не общее количество эпох. Когда last_epoch=-1, расписание запускается с начала. По умолчанию: -1 -
verbose (булево) – Если
True, выводит сообщение в stdout для каждого обновления. По умолчанию: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, эта функция имеет побочный эффект обновления импульса оптимизатора.
-
print_lr(is_verbose, group, lr, epoch=None) -
Отображает текущую скорость обучения.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.optim.lr_scheduler.CyclicLR.html