捷徑

CyclicLR

class torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1, verbose='deprecated')[source][source]

根據循環學習率策略 (CLR) 設定每個參數群組的學習率。

此策略以恆定的頻率在兩個邊界之間循環學習率,如論文 Cyclical Learning Rates for Training Neural Networks 中所述。 兩個邊界之間的距離可以按每次迭代或每次循環來縮放。

循環學習率策略在每個批次之後更改學習率。 應在用於訓練的批次之後調用 step

此類別具有三個內建策略,如論文中所述

  • “triangular”: 沒有幅度縮放的基本三角形循環。

  • “triangular2”: 一個基本的三角形循環,每個循環將初始幅度縮放一半。

  • “exp_range”: 一個循環,透過 gammacycle iterations\text{gamma}^{\text{cycle iterations}} 在每次循環迭代時縮放初始幅度。

此實作改編自 github 儲存庫: bckenstler/CLR

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

  • base_lr (floatlist) – 初始學習率,它是每個參數群組循環中的下邊界。

  • max_lr (floatlist) – 每個參數群組循環中的上學習率邊界。 在功能上,它定義了循環幅度 (max_lr - base_lr)。 任何循環的 lr 都是 base_lr 和幅度的一些縮放的總和; 因此,根據縮放函數,可能實際上無法達到 max_lr。

  • step_size_up (int) – 循環增加一半中的訓練迭代次數。 預設值: 2000

  • step_size_down (int) – 循環減少一半中的訓練迭代次數。 如果 step_size_down 為 None,則將其設定為 step_size_up。 預設值: None

  • mode (str) – {triangular, triangular2, exp_range} 之一。 這些值對應於上面詳述的策略。 如果 scale_fn 不是 None,則忽略此引數。 預設值: ‘triangular’

  • gamma (float) – ‘exp_range’ 縮放函數中的常數: gamma**(cycle iterations) 預設值: 1.0

  • scale_fn (function) – 由單一引數 lambda 函數定義的自訂縮放策略,其中對於所有 x >= 0,0 <= scale_fn(x) <= 1。 如果指定,則忽略 ‘mode’。 預設值: None

  • scale_mode (str) – {‘cycle’, ‘iterations’}。 定義在循環次數還是循環迭代 (自循環開始以來的訓練迭代) 上評估 scale_fn。 預設值: ‘cycle’

  • cycle_momentum (bool) – 如果 True,動量會在 ‘base_momentum’ 和 ‘max_momentum’ 之間以與學習率相反的方式循環。 預設值: True

  • base_momentum (floatlist) – 每個參數群組循環中的較低動量邊界。 請注意,動量以與學習率相反的方式循環;在循環的峰值處,動量為 ‘base_momentum’,學習率為 ‘max_lr’。 預設值: 0.8

  • max_momentum (floatlist) – 每個參數群組在週期中的動量上限邊界。在功能上,它定義了週期振幅(max_momentum - base_momentum)。任何週期中的動量是 max_momentum 和振幅的某種縮放比例之間的差值;因此,根據縮放函數,可能實際上無法達到 base_momentum。請注意,動量與學習率成反比;在週期開始時,動量為 'max_momentum',學習率為 'base_lr'。預設值:0.9

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

  • verbose (bool | str) –

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

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

範例

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr=0.01, max_lr=0.1)
>>> data_loader = torch.utils.data.DataLoader(...)
>>> for epoch in range(10):
>>>     for batch in data_loader:
>>>         train_batch(...)
>>>         scheduler.step()
get_last_lr()[原始碼]

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

傳回類型

List[float]

get_lr()[原始碼][原始碼]

計算批次索引的學習率。

此函數將 self.last_epoch 視為上一個批次索引。

如果 self.cycle_momentumTrue,則此函數具有更新最佳化器的動量的副作用。

load_state_dict(state_dict)[原始碼][原始碼]

載入排程器的狀態。

print_lr(is_verbose, group, lr, epoch=None)[原始碼]

顯示當前學習率。

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

scale_fn(x)[原始碼][原始碼]

取得縮放策略。

傳回類型

float

step(epoch=None)[原始碼]

執行一個 step。

文件

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

檢視文件

教學

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

檢視教學

資源

尋找開發資源並取得問題解答

檢視資源