本文簡要介紹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) -包裝優化器。
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 時,調度從頭開始。默認值:-1verbose(bool) -如果
True
,每次更新都會向標準輸出打印一條消息。默認值:False
。
按照1cycle學習率策略設置各參數組的學習率。 1cycle 策略將學習率從初始學習率退火到某個最大學習率,然後從該最大學習率退火到遠低於初始學習率的某個最小學習率。該政策最初在論文中說明Super-Convergence:使用大學習率非常快速地訓練神經網絡.
1cycle learning rate policy 在每批之後改變學習率。
step
應該在批次用於訓練後調用。此調度程序不可鏈接。
另請注意,循環中的步驟總數可以通過以下兩種方式之一確定(按優先順序列出):
明確提供了total_steps 的值。
提供了多個紀元(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()
參數:
相關用法
- Python PyTorch OneHotCategorical用法及代碼示例
- Python PyTorch OnDiskCacheHolder用法及代碼示例
- Python PyTorch OnlineReader用法及代碼示例
- Python PyTorch ObserverBase.with_args用法及代碼示例
- Python PyTorch ObserverBase.with_callable_args用法及代碼示例
- Python PyTorch OverArch用法及代碼示例
- Python PyTorch frexp用法及代碼示例
- Python PyTorch jvp用法及代碼示例
- Python PyTorch cholesky用法及代碼示例
- Python PyTorch vdot用法及代碼示例
- Python PyTorch ELU用法及代碼示例
- Python PyTorch ScaledDotProduct.__init__用法及代碼示例
- Python PyTorch gumbel_softmax用法及代碼示例
- Python PyTorch get_tokenizer用法及代碼示例
- Python PyTorch saved_tensors_hooks用法及代碼示例
- Python PyTorch positive用法及代碼示例
- Python PyTorch renorm用法及代碼示例
- Python PyTorch AvgPool2d用法及代碼示例
- Python PyTorch MaxUnpool3d用法及代碼示例
- Python PyTorch Bernoulli用法及代碼示例
- Python PyTorch Tensor.unflatten用法及代碼示例
- Python PyTorch Sigmoid用法及代碼示例
- Python PyTorch Tensor.register_hook用法及代碼示例
- Python PyTorch ShardedEmbeddingBagCollection.named_parameters用法及代碼示例
- Python PyTorch sqrt用法及代碼示例
注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.optim.lr_scheduler.OneCycleLR。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。