當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python PyTorch OneCycleLR用法及代碼示例

本文簡要介紹python語言中 torch.optim.lr_scheduler.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)

參數

  • optimizer(Optimizer) -包裝優化器。

  • max_lr(float或者list) -每個參數組在循環中的上層學習率邊界。

  • total_steps(int) -循環中的總步數。請注意,如果此處未提供值,則必須通過提供紀元和steps_per_epoch 的值來推斷。默認值:無

  • epochs(int) -訓練的紀元數。如果未提供 total_steps 的值,則將其與 steps_per_epoch 一起使用,以便推斷循環中的總步數。默認值:無

  • steps_per_epoch(int) -每個時期訓練的步數。如果未提供 total_steps 的值,則將其與紀元一起使用,以便推斷循環中的總步數。默認值:無

  • pct_start(float) -提高學習率所花費的周期百分比(以步驟數計)。默認值:0.3

  • anneal_strategy(str) -{‘cos’, ‘linear’} 指定退火策略:“cos” 表示餘弦退火,“linear” 表示線性退火。默認值:‘cos’

  • cycle_momentum(bool) -如果 True ,動量與 ‘base_momentum’ 和 ‘max_momentum’ 之間的學習率成反比循環。默認值:真

  • base_momentum(float或者list) -每個參數組的循環中的較低動量邊界。請注意,動量的循環與學習率成反比;在一個周期的峰值,動量為‘base_momentum’,學習率為‘max_lr’。默認值:0.85

  • max_momentum(float或者list) -每個參數組的循環中的動量上限。從函數上講,它定義了周期幅度(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) -最後一批的索引。恢複訓練作業時使用此參數。自從step()應該在每批之後調用,而不是在每個 epoch 之後調用,這個數字代表總數量批次計算的,而不是計算的 epoch 總數。當last_epoch=-1 時,調度從頭開始。默認值:-1

  • verbose(bool) -如果 True ,每次更新都會向標準輸出打印一條消息。默認值:False

按照1cycle學習率策略設置各參數組的學習率。 1cycle 策略將學習率從初始學習率退火到某個最大學習率,然後從該最大學習率退火到遠低於初始學習率的某個最小學習率。該政策最初在論文中說明Super-Convergence:使用大學習率非常快速地訓練神經網絡.

1cycle learning rate policy 在每批之後改變學習率。 step 應該在批次用於訓練後調用。

此調度程序不可鏈接。

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

  1. 明確提供了total_steps 的值。

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

您必須為total_steps 提供一個值,或者為時期和steps_per_epoch 提供一個值。

該調度程序的默認行為遵循 1cycle 的 fastai 實現,它聲稱“未發布的工作僅使用兩個階段就顯示出更好的結果”。要改為模仿原始論文的行為,請設置 three_phase=True

示例

>>> 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()

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.optim.lr_scheduler.OneCycleLR。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。