欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用scheduler實現(xiàn)learning-rate學習率動態(tài)變化

 更新時間:2023年09月11日 14:46:19   作者:回爐重造P  
這篇文章主要介紹了如何用scheduler實現(xiàn)learning-rate學習率動態(tài)變化問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

記錄下schedule設置學習率變化過程的使用和方法

優(yōu)化器optimizer

pytorch提供數(shù)種優(yōu)化器的實現(xiàn),優(yōu)化器根據(jù)計算圖的結(jié)構,進行梯度計算,根據(jù)loss信息實現(xiàn)自動的BP過程。

常用的就是 Adam ,將網(wǎng)絡參數(shù)傳入,設置初始的 learning-rate 學習率即可:

optimizer = torch.optim.Adam(model.parameters(), lr=args.learn_rate)

在訓練中:

optimizer.zero_grad()
loss.backward()
optimizer.step()

即可實現(xiàn)BP環(huán)節(jié)。

scheduler

lr_scheduler 提供了隨著訓練的迭代次數(shù)對optimizer的學習率進行修改的類和方法,通過在循環(huán)過程中調(diào)用:

scheduler.step()

每次調(diào)用step方法,類中內(nèi)置的計數(shù)器就會+1,即 epoch 輪次數(shù)增加。

根據(jù)不同的當前 epoch ,scheduler類會對optimizer中的learning-rate進行修改。

利用 optimizer.param_groups[0]['lr'] 可查看當前的學習率大小。

這邊整理三個常用的類:LambdaLRStepLRMultiStepLR。

個人覺得這三種就能應對大部分的調(diào)整需求了。

LambdaLR

完整的類包為 torch.optim.lr_scheduler.LambdaLR 。

該類實現(xiàn)的學習率變化策略為當前學習率乘以值 λ , λ 的大小由一個自定函數(shù)確定,該函數(shù)輸入為epoch,即類中的循環(huán)次數(shù)計數(shù)(也就是調(diào)用 scheduler.step() 的次數(shù))。

learing-rate = λ * learing-rate

LambdaLR(optimizer, lr_lambda, last_epoch=-1)

其中 lr_lambda 為λ的計算函數(shù)。

給個使用例子:

# 簡單寫個Moudle生成parameter
class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.liner = nn.Linear(10, 10)
model = MyModel()
# 生成optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

計算函數(shù):

def lb_func(epoch):
    return 1 / (epoch + 1)

在循環(huán)中使用:

lambda_scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lb_func)
for epoch in range(10):
    optimizer.zero_grad()
    optimizer.step()
    print("當前l(fā)r為{}".format(optimizer.param_groups[0]['lr']))
    lambda_scheduler.step()

輸出:

當前l(fā)r為0.01
當前l(fā)r為0.005
當前l(fā)r為0.003333333333333333
當前l(fā)r為0.0025
當前l(fā)r為0.002
當前l(fā)r為0.0016666666666666666
當前l(fā)r為0.0014285714285714286
當前l(fā)r為0.00125
當前l(fā)r為0.0011111111111111111
當前l(fā)r為0.001

當scheduler調(diào)用step之后,就能修改對應的optimizer的lr參數(shù),從而改變整體訓練的學習率。

StepLR

完整的類包為 torch.optim.lr_scheduler.StepLR

該類的學習策略為設定某個間隔 step_size ,在經(jīng)過間隔次數(shù)的循環(huán)之后,就將學習率乘以γ得到新的學習率。

learning_rate = learning_rate * (γ ^ (epoch//step_size))

StepLR(optimizer, step_size, gamma)

給個使用例子:

step_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)
for epoch in range(10):
    optimizer.zero_grad()
    optimizer.step()
    print("當前l(fā)r為{}".format(optimizer.param_groups[0]['lr']))
    step_scheduler.step()

輸出:

當前l(fā)r為0.01
當前l(fā)r為0.01
當前l(fā)r為0.01
當前l(fā)r為0.001
當前l(fā)r為0.001
當前l(fā)r為0.001
當前l(fā)r為0.0001
當前l(fā)r為0.0001
當前l(fā)r為0.0001
當前l(fā)r為1e-05

設定間隔和γ值即可。

MultiStepLR

完整的類包為 torch.optim.lr_scheduler.MultiStepLR 。

這個類更新策略和step差不多,但其不一定為等間隔更新,有里程碑 milestones 參數(shù),用來傳入更新的輪次list,每次迭代次數(shù)到達 milestones 中的某值,即進行學習率的更新。

MultiStepLR(optimizer, milestones, gamma)

milestones 需要順序排列。

給個使用例子:

multi_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[2, 4, 6, 8], gamma=0.1)
for epoch in range(10):
    optimizer.zero_grad()
    optimizer.step()
    print("當前l(fā)r為{}".format(optimizer.param_groups[0]['lr']))
    multi_scheduler.step()

輸出:

當前l(fā)r為0.01
當前l(fā)r為0.01
當前l(fā)r為0.001
當前l(fā)r為0.001
當前l(fā)r為0.0001
當前l(fā)r為0.0001
當前l(fā)r為1e-05
當前l(fā)r為1e-05
當前l(fā)r為1.0000000000000002e-06
當前l(fā)r為1.0000000000000002e-06

last_epoch

scheduler初始化的時候都有個 last_epoch 的參數(shù),當訓練中止保存后,重開的時候就會調(diào)用 last_epoch 作為當前epoch,以繼續(xù)訓練,默認為-1從頭開始。

參考文檔

lr_scheduler文檔:https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • pandas數(shù)值計算與排序方法

    pandas數(shù)值計算與排序方法

    下面小編就為大家分享一篇pandas數(shù)值計算與排序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python實現(xiàn)GATK多線程加速示例

    python實現(xiàn)GATK多線程加速示例

    這篇文章主要為大家介紹了python實現(xiàn)GATK多線程加速示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Python3 關于pycharm自動導入包快捷設置的方法

    Python3 關于pycharm自動導入包快捷設置的方法

    今天小編就為大家分享一篇Python3 關于pycharm自動導入包快捷設置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題

    解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題

    今天小編就為大家分享一篇解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 詳解用 python-docx 創(chuàng)建浮動圖片

    詳解用 python-docx 創(chuàng)建浮動圖片

    這篇文章主要介紹了詳解用 python-docx 創(chuàng)建浮動圖片,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python實現(xiàn)保證只能運行一個腳本實例

    Python實現(xiàn)保證只能運行一個腳本實例

    這篇文章主要介紹了Python實現(xiàn)保證只能運行一個腳本實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • 利用ctypes提高Python的執(zhí)行速度

    利用ctypes提高Python的執(zhí)行速度

    這篇文章給大家介紹了如何利用ctypes提高Python的執(zhí)行速度,對大家學習使用python具有一定的參考借鑒價值。有需要的朋友們一起來看看吧。
    2016-09-09
  • NumPy中的實用函數(shù)clip詳解

    NumPy中的實用函數(shù)clip詳解

    這篇文章主要介紹了NumPy中的實用函數(shù)clip詳解,NumPy函數(shù)clip()用于保留數(shù)組中在間隔范圍內(nèi)的值,給定一個范圍,范圍外的值將剪裁到范圍邊界,需要的朋友可以參考下的相關資料
    2023-08-08
  • django ModelForm修改顯示縮略圖 imagefield類型的實例

    django ModelForm修改顯示縮略圖 imagefield類型的實例

    今天小編就為大家分享一篇django ModelForm修改顯示縮略圖 imagefield類型的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python實現(xiàn)查詢某個目錄下修改時間最新的文件示例

    Python實現(xiàn)查詢某個目錄下修改時間最新的文件示例

    這篇文章主要介紹了Python實現(xiàn)查詢某個目錄下修改時間最新的文件,涉及Python使用os與shutil模塊針對文件的遍歷、屬性獲取、讀寫等相關操作技巧,需要的朋友可以參考下
    2018-08-08

最新評論