日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch必须掌握的的4种学习率衰减策略

發布時間:2024/10/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch必须掌握的的4种学习率衰减策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


原文:

pytorch必須掌握的的4種學習率衰減策略

  • 1.指數衰減
  • 2. 固定步長衰減
  • 3. 多步長衰減
  • 4. 余弦退火衰減
  • 5. 上述4種學習率動態更新策略的說明

梯度下降算法需要我們指定一個學習率作為權重更新步幅的控制因子,常用的學習率有0.01、0.001以及0.0001等,學習率越大則權重更新。一般來說,我們希望在訓練初期學習率大一些,使得網絡收斂迅速,在訓練后期學習率小一些,使得網絡更好的收斂到最優解。下圖展示了隨著迭代的進行動態調整學習率的4種策略曲線:


上述4種策略為自己根據資料整理得到的衰減類型:指數衰減、固定步長的衰減、多步長衰、余弦退火衰減。下面逐一介紹其性質,及pytorch對應的使用方式,需要注意學習率衰減策略很大程度上是依賴于經驗與具體問題的,不能照搬參數。

1.指數衰減

學習率按照指數的形式衰減是比較常用的策略,我們首先需要確定需要針對哪個優化器執行學習率動態調整策略,也就是首先定義一個優化器:

optimizer_ExpLR = torch.optim.SGD(net.parameters(), lr=0.1)

定義好優化器以后,就可以給這個優化器綁定一個指數衰減學習率控制器:

ExpLR = torch.optim.lr_scheduler.ExponentialLR(optimizer_ExpLR, gamma=0.98)

其中參數gamma表示衰減的底數,選擇不同的gamma值可以獲得幅度不同的衰減曲線,如下:

2. 固定步長衰減

有時我們希望學習率每隔一定步數(或者epoch)就減少為原來的gamma分之一,使用固定步長衰減依舊先定義優化器,再給優化器綁定StepLR對象:

optimizer_StepLR = torch.optim.SGD(net.parameters(), lr=0.1) StepLR = torch.optim.lr_scheduler.StepLR(optimizer_StepLR, step_size=step_size, gamma=0.65)

其中gamma參數表示衰減的程度,step_size參數表示每隔多少個step進行一次學習率調整,下面對比了不同gamma值下的學習率變化情況:

Example:>>> # Assuming optimizer uses lr = 0.05 for all groups>>> # lr = 0.05 if epoch < 30>>> # lr = 0.005 if 30 <= epoch < 60>>> # lr = 0.0005 if 60 <= epoch < 90>>> # ...>>> scheduler = StepLR(optimizer, step_size=30, gamma=0.1)>>> for epoch in range(100):>>> train(...)>>> validate(...)>>> scheduler.step()

3. 多步長衰減

上述固定步長的衰減的雖然能夠按照固定的區間長度進行學習率更新,但是有時我們希望不同的區間采用不同的更新頻率,或者是有的區間更新學習率,有的區間不更新學習率,這就需要使用MultiStepLR來實現動態區間長度控制:

optimizer_MultiStepLR = torch.optim.SGD(net.parameters(), lr=0.1) torch.optim.lr_scheduler.MultiStepLR(optimizer_MultiStepLR,milestones=[200, 300, 320, 340, 200], gamma=0.8)

其中milestones參數為表示學習率更新的起止區間,在區間[0. 200]內學習率不更新,而在[200, 300]、[300, 320]…[340, 400]的右側值都進行一次更新;gamma參數表示學習率衰減為上次的gamma分之一。其圖示如下:


從圖中可以看出,學習率在區間[200, 400]內快速的下降,這就是milestones參數所控制的,在milestones以外的區間學習率始終保持不變。

Example:>>> # Assuming optimizer uses lr = 0.05 for all groups>>> # lr = 0.05 if epoch < 30>>> # lr = 0.005 if 30 <= epoch < 80>>> # lr = 0.0005 if epoch >= 80>>> scheduler = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1)>>> for epoch in range(100):>>> train(...)>>> validate(...)>>> scheduler.step()

4. 余弦退火衰減

嚴格的說,余弦退火策略不應該算是學習率衰減策略,因為它使得學習率按照周期變化,其定義方式如下:

optimizer_CosineLR = torch.optim.SGD(net.parameters(), lr=0.1) CosineLR = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_CosineLR, T_max=150, eta_min=0)

其包含的參數和余弦知識一致,參數T_max表示余弦函數周期;eta_min表示學習率的最小值,默認它是0表示學習率至少為正值。確定一個余弦函數需要知道最值和周期,其中周期就是T_max,最值是初試學習率。下圖展示了不同周期下的余弦學習率更新曲線:

5. 上述4種學習率動態更新策略的說明

4個負責學習率調整的類:StepLR、ExponentialLR、MultiStepLR和CosineAnnealingLR,其完整對學習率的更新都是在其step()函數被調用以后完成的,這個step表達的含義可以是一次迭代,當然更多情況下應該是一個epoch以后進行一次scheduler.step(),這根據具體問題來確定。此外,根據pytorch官網上給出的說明,scheduler.step()函數的調用應該在訓練代碼以后:

>>> scheduler = ... >>> for epoch in range(100): >>> train(...) >>> validate(...) >>> scheduler.step()

總結

以上是生活随笔為你收集整理的pytorch必须掌握的的4种学习率衰减策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。