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, verbose=False)[source] -
Устанавливает скорость обучения каждого параметрического блока в соответствии с политикой скорости обучения 1cycle. Политика 1cycle уменьшает скорость обучения от начальной скорости обучения до некоторой максимальной скорости обучения, а затем от этой максимальной скорости обучения до некоторой минимальной скорости обучения, намного меньшей начальной скорости обучения. Эта политика была изначально описана в статье Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates.
Политика скорости обучения 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 (Оптимизатор) – Обёртка оптимизатора.
- max_lr (float или список) – Верхние границы скорости обучения в цикле для каждой группы параметров.
- total_steps (целое число) – Общее число шагов в цикле. Обратите внимание, что если это значение не указано, то оно должно быть выведено путём указания значений epochs и steps_per_epoch. По умолчанию: None
- epochs (целое число) – Количество эпох для обучения. Это используется вместе с steps_per_epoch для определения общего числа шагов в цикле, если значение total_steps не задано. По умолчанию: None
- steps_per_epoch (целое число) – Количество шагов на эпоху для обучения. Это используется вместе с epochs для определения общего числа шагов в цикле, если значение total_steps не задано. По умолчанию: None
- pct_start (вещественное число) – Процент цикла (в количестве шагов), затраченный на увеличение скорости обучения. По умолчанию: 0.3
- anneal_strategy (строка) – {‘cos’, ‘linear’} Указывает стратегию отжига: “cos” для отжига по косинусу, “linear” для линейного отжига. По умолчанию: ‘cos’
-
cycle_momentum (логическое значение) – Если
True, импульс циклически изменяется обратно пропорционально скорости обучения между ‘base_momentum’ и ‘max_momentum’. По умолчанию: True - base_momentum (вещественное число или список) – Нижние границы импульса в цикле для каждой группы параметров. Обратите внимание, что импульс циклически изменяется обратно пропорционально скорости обучения; в пиковой точке цикла импульс равен ‘base_momentum’, а скорость обучения равна ‘max_lr’. По умолчанию: 0.85
- max_momentum (вещественное число или список) – Верхние границы импульса в цикле для каждой группы параметров. Функционально, определяет амплитуду цикла (max_momentum - base_momentum). Обратите внимание, что импульс циклически изменяется обратно пропорционально скорости обучения; в начале цикла импульс равен ‘max_momentum’, а скорость обучения равна ‘base_lr’ По умолчанию: 0.95
- div_factor (вещественное число) – Определяет начальную скорость обучения через initial_lr = max_lr/div_factor По умолчанию: 25
- final_div_factor (вещественное число) – Определяет минимальную скорость обучения через min_lr = initial_lr/final_div_factor По умолчанию: 1e4
-
three_phase (логическое значение) – Если
True, использовать третью фазу графика для уничтожения скорости обучения в соответствии с ‘final_div_factor’ вместо изменения второй фазы (первые две фазы будут симметричны относительно шага, указанного ‘pct_start’). -
last_epoch (целое число) – Индекс последней итерации. Этот параметр используется при возобновлении работы обучения. Так как
step()следует вызывать после каждой итерации, а не после каждой эпохи, это число представляет общее количество _итераций_, а не общее количество эпох. Когда last_epoch=-1, планировщик запускается с начала. -
verbose (логическое значение) – Если
True, выводит сообщение в стандартный вывод для каждого обновления. По умолчанию:False.
Пример
>>> data_loader = torch.utils.data.DataLoader(...) >>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, 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(...) >>> scheduler.step()
-
get_last_lr() -
Возвращает последнюю вычисленную скорость обучения текущим планировщиком.
-
load_state_dict(state_dict) -
Загружает состояние планировщика.
- Параметры:
-
state_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.OneCycleLR.html