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


Python PyTorch CyclicLR用法及代碼示例

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

參數

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

  • base_lr(float或者list) -初始學習率,它是每個參數組循環中的下邊界。

  • 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 為無,則設置為step_size_up。默認值:無

  • mode(str) -{三角形,三角形2,exp_range}之一。值對應於上麵詳述的政策。如果 scale_fn 不是 None,則忽略此參數。默認值:‘triangular’

  • gamma(float) -‘exp_range’ 縮放函數中的常數:gamma**(循環迭代)默認值:1.0

  • scale_fn(函數) -由單個參數 lambda 函數定義的自定義縮放策略,其中 0 <= scale_fn(x) <= 1 表示所有 x >= 0。如果指定,則忽略 ‘mode’。默認值:無

  • scale_mode(str) -{‘cycle’, ‘iterations’}。定義 scale_fn 是根據循環次數還是循環迭代(自循環開始以來的訓練迭代)進行評估。默認值:‘cycle’

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

  • base_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) -最後一批的索引。恢複訓練作業時使用此參數。自從step()應該在每批之後調用,而不是在每個 epoch 之後調用,這個數字代表總數量批次計算的,而不是計算的 epoch 總數。當last_epoch=-1 時,調度從頭開始。默認值:-1

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

根據循環學習率策略 (CLR) 設置每個參數組的學習率。該策略以恒定頻率循環兩個邊界之間的學習率,如論文中所述訓練神經網絡的循環學習率.兩個邊界之間的距離可以在per-iteration 或per-cycle 的基礎上進行縮放。

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

如本文所述,此類具有三個內置策略:

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

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

  • “exp_range”:在每個循環迭代中按 縮放初始幅度的循環。

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

示例

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

相關用法


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