評價此頁

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)[source]#

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

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

1cycle 學習率策略在每個 batch 之後都會改變學習率。`step` 應在 batch 用於訓練後呼叫。

此排程器不支援鏈式呼叫。

另請注意,週期中的總步數可以透過以下兩種方式之一確定(按優先順序順序列出):

  1. 明確提供了 total_steps 的值。

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

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

此排程器的預設行為遵循 fastai 實現的 1cycle,該實現聲稱“未發表的工作透過僅使用兩個階段獲得了更好的結果”。要模仿原始論文的行為,請將 `three_phase=True` 設定為 True。

引數
  • optimizer (Optimizer) – 包裝的最佳化器。

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

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

  • epochs (int) – 訓練的 epoch 數。此引數與 steps_per_epoch 一起用於推斷週期中的總步數,前提是未提供 total_steps 的值。預設值:None

  • steps_per_epoch (int) – 每個 epoch 的訓練步數。此引數與 epochs 一起用於推斷週期中的總步數,前提是未提供 total_steps 的值。預設值: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) – 上一個 batch 的索引。此引數在恢復訓練任務時使用。由於 `step()` 應在每個 batch 之後呼叫,而不是在每個 epoch 之後呼叫,因此此數字表示已計算的 *batch* 的總數,而不是已計算的 epoch 的總數。當 last_epoch=-1 時,計劃從頭開始。預設值:-1

示例

>>> 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()
../_images/OneCycleLR.png
get_last_lr()[source]#

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

返回型別

list[float]

get_lr()[source]#

計算每個引數組的學習率。

返回型別

list[float]

load_state_dict(state_dict)[source]#

載入排程器的狀態。

引數

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

state_dict()[source]#

返回排程器狀態,作為一個 dict

它包含 self.__dict__ 中除最佳化器之外的所有變數的條目。

返回型別

dict[str, Any]

step(epoch=None)[source]#

執行一步。