pytorch 查看当前学习率_pytorch调整模型训练的学习率
簡介
torch.optim.lr_scheduler :提供了一些方法可以基于epochs的值來調(diào)整學習率。
torch.optim.lr_scheduler.ReduceLROnPlateau :則提供了基于訓練中某些測量值使學習率動態(tài)下降的方法。
注意:學習率調(diào)整應該在優(yōu)化器的更新之后,例如:
scheduler = ... >>> for epoch in range(100): >>> train(...) >>> validate(...) >>> scheduler.step()警告:在PyTorch 1.1.0之前,學習率調(diào)整程序應在優(yōu)化程序更新之前調(diào)用。也就是如果你在optimizer.step()這句代碼之前使用scheduler.step(),會跳過學習率的第一個值。
一、用lamda函數(shù)作為學習率的乘積因子更新學習率
torch.optim.lr_scheduler.LambdaLR(optimizer,lr_lambda,last_epoch=-1,verbose=False)
將每個參數(shù)組的學習率設置為:初始化學習率
lambda函數(shù)。當last_epoch = -1時,將初始學習率設置為lr。optimizer:優(yōu)化器
lr_lambda:函數(shù)或者函數(shù)列表,用來計算乘積因子,通常epoch為函數(shù)參數(shù)。當為函數(shù)列表的時候可以為optimizer.param_groups中的每個參數(shù)組設置學習率。
last_epoch:默認為-1,一般不用管
二、用列表的元素控制衰退時機
torch.optim.lr_scheduler.MultiStepLR(optimizer,milestones,gamma=0.1,last_epoch=-1,verbose=False)
一旦訓練過程中epoch的數(shù)目達到milestones中的數(shù)值后,每一組參數(shù)的學習率會乘以gamma進行一次衰減。
milestones:列表的每個元素表示訓練到這個epoch的時候?qū)W習率會衰減一次。
gamma:衰減因子
注意:一定要用get_last_lr(),而不是以前的get_lr(),不然打印的輸出信息會有點小問題,這里有個坑小心。
三、固定步長的學習率衰減
torch.optim.lr_scheduler.StepLR(optimizer,step_size,gamma=0.1,last_epoch=-1,verbose=False)
每訓練step_size個epochs,每組參數(shù)就會衰減一次學習率。
step_size:決定學習率衰減的時期
gamma:衰減因子
四、每訓練一個epoch,學習率衰減一次
torch.optim.lr_scheduler.ExponentialLR(optimizer,gamma,last_epoch=-1,verbose=False)
五、余弦退火調(diào)整學習率
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max,eta_min=0,last_epoch=-1,verbose=False)
學習率調(diào)整公式:
右邊的函數(shù)周期為
,在 個epoch后降到最低學習率 ,然后學習率在接下來 個epoch后上升到 :初始的學習率 :迭代過程中最小的學習率 :當前的epoch的數(shù)目 :lr的變化是周期性的,T_max是周期的一半。舉例子:比如
,初始學習率為0.1,最小學習率為0,如下圖:六、根據(jù)訓練中某些度量值(指標)動態(tài)的調(diào)節(jié)學習率
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer,mode='min',factor=0.1,patience=10,threshold=0.0001,threshold_mode='rel',cooldown=0,min_lr=0,eps=1e-08,verbose=False)
當某一項指標停止往好的趨勢變化的時候,通過調(diào)整學習率可以使模型受益。例如驗證集的loss不再下降或者accuracy不再上升時,進行學習率調(diào)整。
mode(str):有min和max兩種模式。min模式表示指標不再降低的時候降低學習率,max模式表示指標不再上升的時候降低學習率。
factor(float):學習率調(diào)整的倍數(shù),new_lr = lr * factor.
patience(int):所能忍耐的多少個epoch迭代,指標卻不改善。比如為2時,表示可以最大程度接受連續(xù)兩個epoch沒有改善指標,當?shù)谌齻€epoch仍然沒有改善的時候,馬上降低學習率。
threshhold_mode(str):有rel和abs兩種模式
threshhold(float):
上面這兩個參數(shù)我沒弄懂,如果有懂得給我留個言,哈哈
min_lr(float or list):學習率的下限,如果有多個參數(shù)組的話,需要為每一個參數(shù)組設置,可以為一個列表。
eps(float):學習率衰減的最小值,當學習率變化小于eps,則不調(diào)整學習率。
注意:使用的時候要選擇網(wǎng)絡的度量指標,比如要用scheduler.step(train_loss)這種代碼,表明監(jiān)控哪一種指標。
總結(jié)
以上是生活随笔為你收集整理的pytorch 查看当前学习率_pytorch调整模型训练的学习率的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的窗口处理模块_python
- 下一篇: python requests text