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