快捷方式

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)[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)。任何週期的學習率都是 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**(週期迭代次數) 預設值: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) – 上一個批次的索引。此引數用於恢復訓練任務。由於 step() 應該在每個批次之後呼叫,而不是在每個 epoch 之後呼叫,因此此數字表示計算的總 *批次* 數,而不是計算的總 epoch 數。當 last_epoch=-1 時,排程器從頭開始。預設值:-1

示例

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

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

返回型別

list[float]

get_lr()[source][source]

計算批次索引處的學習率。

此函式將 self.last_epoch 視為最後一個批次索引。

如果 self.cycle_momentumTrue,此函式會產生更新最佳化器動量的副作用。

load_state_dict(state_dict)[source][source]

載入排程器的狀態。

scale_fn(x)[source][source]

獲取縮放策略。

返回型別

float

step(epoch=None)[source]

執行一步。

文件

訪問全面的 PyTorch 開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源