快捷方式

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='deprecated')[source][source]

根據 1cycle 學習率策略設定每個參數群組的學習率。

1cycle 策略會將學習率從初始學習率退火到某個最大學習率,然後從該最大學習率退火到某個遠低於初始學習率的最小學習率。此策略最初在論文 Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates 中描述。

1cycle 學習率策略會在每個批次後更改學習率。step 應該在批次用於訓練後調用。

此排程器不可鏈式使用。

另請注意,週期中的總步數可以透過兩種方式確定(依優先順序排列)

  1. 明確提供 total_steps 的值。

  2. 提供 epochs(epoch 數)和 steps_per_epoch(每個 epoch 的步數)。 在這種情況下,總步數由 total_steps = epochs * steps_per_epoch 推斷。

您必須提供 total_steps 的值,或同時提供 epochs 和 steps_per_epoch 的值。

此排程器的預設行為遵循 fastai 的 1cycle 實作,該實作聲稱「未公開的工作顯示僅使用兩個階段甚至可以獲得更好的結果」。 若要模仿原始論文的行為,請設定 three_phase=True

參數
  • optimizer (Optimizer) – 包裝的優化器。

  • max_lr (floatlist) – 每個參數群組週期中的學習率上限。

  • total_steps (int) – 週期中的總步數。 請注意,如果此處未提供值,則必須透過提供 epochs 和 steps_per_epoch 的值來推斷。 預設值:None

  • epochs (int) – 要訓練的 epoch 數。 如果未提供 total_steps 的值,則將此值與 steps_per_epoch 一起使用,以推斷週期中的總步數。 預設值:None

  • steps_per_epoch (int) – 每個 epoch 要訓練的步數。 如果未提供 total_steps 的值,則將此值與 epochs 一起使用,以推斷週期中的總步數。 預設值:None

  • pct_start (float) – 週期中用於增加學習率的百分比(以步數計)。 預設值:0.3

  • anneal_strategy (str) – {'cos', 'linear'} 指定退火策略:“cos” 表示餘弦退火,“linear” 表示線性退火。 預設值:'cos'

  • cycle_momentum (bool) – 如果 True,則動量在 'base_momentum' 和 'max_momentum' 之間與學習率成反比循環。 預設值:True

  • base_momentum (floatlist) – 每個參數群組週期中的動量下限。 請注意,動量與學習率成反比循環;在週期的高峰期,動量為 'base_momentum',學習率為 'max_lr'。 預設值:0.85

  • max_momentum (floatlist) – 每個參數群組週期中的動量上限。 從功能上講,它定義了週期幅度(max_momentum - base_momentum)。 請注意,動量與學習率成反比循環;在週期開始時,動量為 'max_momentum',學習率為 'base_lr'。 預設值:0.95

  • div_factor (float) – 透過 initial_lr = max_lr/div_factor 確定初始學習率。 預設值:25

  • final_div_factor (float) – 透過 min_lr = initial_lr/final_div_factor 確定最小學習率。 預設值:1e4

  • three_phase ( bool) – 如果 True,則使用排程的第三階段,根據 ‘final_div_factor’ 消除學習率,而不是修改第二階段 (前兩個階段將關於 ‘pct_start’ 指示的步驟對稱)。

  • last_epoch ( int) – 最後一個批次的索引。此參數用於恢復訓練任務。由於應在每個批次之後而不是在每個 epoch 之後調用 step(),因此此數字表示計算的批次總數,而不是計算的 epoch 總數。當 last_epoch=-1 時,排程從頭開始。預設值:-1

  • verbose ( bool | str) –

    如果 True,則為每次更新將訊息列印到 stdout。預設值:False

    自 2.2 版本起已棄用: verbose 已棄用。請使用 get_last_lr() 訪問學習率。

範例

>>> data_loader = torch.utils.data.DataLoader(...)
>>> optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, 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()[source]

返回當前排程器計算的最後一個學習率。

返回類型

List[float]

get_lr()[source][source]

計算每個參數群組的學習率。

load_state_dict(state_dict)[source]

載入排程器的狀態。

參數

state_dict ( dict) – 排程器狀態。應該是從呼叫 state_dict() 返回的物件。

print_lr(is_verbose, group, lr, epoch=None)[source]

顯示目前的學習率。

自 2.4 版本起已棄用: print_lr() 已棄用。請使用 get_last_lr() 訪問學習率。

state_dict()[source]

將排程器的狀態作為 dict 傳回。

它包含 self.__dict__ 中每個變數的條目,除了 optimizer。

step(epoch=None)[source]

執行一個步驟。

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並獲得您的問題解答

檢視資源