簡體   English   中英

Pytorch:有沒有辦法在使用調度程序時實現逐層學習率衰減?

[英]Pytorch: Is there a way to implement layer-wise learning rate decay when using a Scheduler?

我想在仍然使用調度程序的同時實現逐層學習率衰減。 具體來說,我目前擁有的是:

model = Model()
optim = optim.Adam(lr=0.1)
scheduler = optim.lr_scheduler.OneCycleLR(optim, max_lr=0.1)

然后,學習率在前 30% 的 epoch 中增加到0.1 ,並隨着時間的推移逐漸衰減。 我想通過分層學習率衰減進一步添加它。

本教程是我想要實現的東西,但它使用固定的 LR ,而不是像與調度程序一起使用時那樣更改 LR。 我想要的是在每一步,model 仍然使用它從優化器獲得的 LR,但是每一層的 LR 也被一個因子衰減 它是這樣的:

for i in range(steps):
    lr = scheduler.get_last_lr()
    for idx, layer in enumerate(model.layers()):
        layer['lr'] = lr * 0.9 ** (idx+1)
    output = model(input)
    ...

但是,使用它時,是否必須再次將model.parameters()傳遞給優化器? 在這種情況下將如何計算 LR? 有一個更好的方法嗎?

此外,我正在尋找一種方法來為非常大的模型執行此操作,其中列出所有層並為每個層指定 LR 有點詳盡無遺。

如果你想做一些不是痛苦的香草,pytorch 預實現的學習率計划,我建議放棄 pytorch scheduler class 並自己手動調整每個參數組的學習率。 您可以直接訪問此處看到的學習率,類似於上面的代碼,但訪問優化器參數組句柄而不是直接訪問 model 層:

for group in optim.param_groups:
    group["lr"] *= 0.9      # for example

從這里開始,您可以使用衰減因子列表或以參數組名稱為關鍵字的字典來使其簡潔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM