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”: 一個循環,透過 在每次循環迭代時縮放初始幅度。
此實作改編自 github 儲存庫: bckenstler/CLR
- 參數
optimizer (Optimizer) – 包裝的優化器。
max_lr (float 或 list) – 每個參數群組循環中的上學習率邊界。 在功能上,它定義了循環幅度 (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’ 之間以與學習率相反的方式循環。 預設值: Truebase_momentum (float 或 list) – 每個參數群組循環中的較低動量邊界。 請注意,動量以與學習率相反的方式循環;在循環的峰值處,動量為 ‘base_momentum’,學習率為 ‘max_lr’。 預設值: 0.8
max_momentum (float 或 list) – 每個參數群組在週期中的動量上限邊界。在功能上,它定義了週期振幅(max_momentum - base_momentum)。任何週期中的動量是 max_momentum 和振幅的某種縮放比例之間的差值;因此,根據縮放函數,可能實際上無法達到 base_momentum。請注意,動量與學習率成反比;在週期開始時,動量為 'max_momentum',學習率為 'base_lr'。預設值:0.9
last_epoch (int) – 上一個批次的索引。此參數用於恢復訓練任務。由於應在每個批次之後而不是在每個 epoch 之後調用 step(),因此此數字表示已計算的批次總數,而不是已計算的 epoch 總數。當 last_epoch=-1 時,排程從頭開始。預設值:-1
如果
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_lr()[原始碼][原始碼]¶
計算批次索引的學習率。
此函數將 self.last_epoch 視為上一個批次索引。
如果 self.cycle_momentum 為
True
,則此函數具有更新最佳化器的動量的副作用。