pytorch實現學習率衰減

2022-07-30 12:30:18 字數 3971 閱讀 2065

目錄exponentiallr——指數連續衰減

使用for迴圈來手動人工進行learning rate的衰減

model = net()

lr = 0.01

optimizer = adam(model.parameters(),lr = lr)

lr_list =

for epoch in range(100):

if epoch % 5 == 0:

for p in optimizer.param_groups:

p['lr'] *= 0.9#注意這裡

lambdalr——lambda函式衰減

torch.optim.lr_scheduler.lambdalr(optimizer, lr_lambda, last_epoch=-1)
lr_lambda 會接收到乙個int引數:epoch,然後根據epoch計算出對應的lr。如果設定多個lambda函式的話,會分別作用於optimizer中的不同的params_group

steplr——階梯式衰減

torch.optim.lr_scheduler.steplr(optimizer, step_size, gamma=0.1, last_epoch=-1)
每個一定的epoch,lr會自動乘以gamma進行階梯式衰減

⭐⭐⭐注意:pytorch1.1.0之後scheduler.step()要放在optimizer.step()之後!!!

multisteplr——多階梯式衰減

torch.optim.lr_scheduler.multisteplr(optimizer, milestones, gamma=0.1, last_epoch=-1)
三段式lr,epoch進入milestones範圍內即乘以gamma,離開milestones範圍之後再乘以gamma。這種衰減方式也是在學術**中最常見的方式,一般手動調整也會採用這種方法。

torch.optim.lr_scheduler.exponentiallr(optimizer, gamma, last_epoch=-1)
每個epoch中lr都乘以gamma

cosineannealinglr——余弦退火衰減

torch.optim.lr_scheduler.cosineannealinglr(optimizer, t_max, eta_min=0, last_epoch=-1)
t_max 對應1/2個cos週期所對應的epoch數值

eta_min 為最小的lr值,預設為0

torch.optim.lr_scheduler.reducelronplateau(optimizer, mode='min', factor=0.1, patience=10, verbose=false, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
在發現loss不再降低或者acc不再提高之後,降低學習率。各引數意義如下:

mode:'min'模式檢測metric是否不再減小,'max'模式檢測metric是否不再增大;

factor: 觸發條件後lr*=factor;

patience:不再減小(或增大)的累計次數;

verbose:觸發條件後print;

threshold:只關注超過閾值的顯著變化;

threshold_mode:有rel和abs兩種閾值計算模式,rel規則:max模式下如果超過best(1+threshold)為顯著,min模式下如果低於best(1-threshold)為顯著;abs規則:max模式下如果超過best+threshold為顯著,min模式下如果低於best-threshold為顯著;

cooldown:觸發一次條件後,等待一定epoch再進行檢測,避免lr下降過速;

min_lr:最小的允許lr;

eps:如果新舊lr之間的差異小與1e-8,則忽略此次更新。

參考:

Tensorflow 自實現學習率衰減

官方各種衰減策略 將學習率設定為不可訓練的variable,這樣學習率就是圖中乙個運算節點,而非標量 self.decay learning rate tf.variable float self.learning rate trainable false,dtype tf.float32 優化演算...

分層學習率設定和學習率衰減(pytorch)

在使用bert或者其它預訓練模型進行微調,下接其它具體任務相關的模組時,會面臨這樣乙個問題,bert由於已經進行了預訓練,引數已經達到了乙個較好的水平,如果要保持其不會降低,學習率就不能太大,而下接結構是從零開始訓練,用小的學習率訓練不僅學習慢,而且也很難與bert本體訓練同步。因此在訓練時候就需要...

學習率衰減

在訓練深度神經網路時,通常會隨著訓練的進行降低學習率。這可以通過使用預定義的學習率計畫或自適應學習率方法來完成。學習率表 學習率時間表旨在根據預先定義的時間表降低學習率,從而在訓練過程中調整學習率。常見的學習率時間表包括基於時間的衰減,逐步衰減和指數衰減。什麼是學習率?使用隨機梯度下降演算法訓練深度...