Spec-Zone.ru › PyTorch 2

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 необходимо вызывать после использования итерации для обучения.

Этот планировщик не является цепным.

Обратите также внимание, что общее количество шагов в цикле можно определить двумя способами (в порядке приоритета):

  1. Явно задано значение для total_steps.
  2. Задано количество эпох (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 или список) – Верхние границы скорости обучения в цикле для каждой группы параметров.
  • 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, расписание запускается с начала. По умолчанию: -1
  • verbose (булево) – Если True, выводит сообщение в stdout для каждого обновления. По умолчанию: 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(...)
>>>         optimizer.step()
>>>         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/2.1/generated/torch.optim.lr_scheduler.OneCycleLR.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API