pytorch(1.1.0) StepLR 中 get_lr()方法的一個bug

pytorch中的StepLR實現時有一個小細節:
舉例:
設置step_size=5,gamma=0.1時,
記初始學習率爲lr,
實際上每次在第五個epoch學習率會先衰減爲 lr * (gamma^2),
然後下一個epoch之後纔是 lr * gamma.
猜測這種學習率的改變方式應該是爲了在學習率衰減時更好的過渡?

————————————————————————

補充,經評論區提示,下面的情況實際是get_lr函數的一個bug。
在新版本pytorch中已修復。
詳見這個issue!

————————————————————————
測試環境:
python 3.6.8
pytorch 1.1.0
測試代碼如下:

import torch
from torch.optim.lr_scheduler import StepLR
model = torch.nn.Linear(5,10)
optim = torch.optim.SGD(model.parameters(), lr = 1)
scheduler = StepLR(optim,step_size=5 , gamma=0.1)
model.train()
for i in range(25):
    optim.step()
    scheduler.step()
    print(scheduler.get_lr()[0])

以上代碼輸出如下:

1
1
1
1
0.010000000000000002
0.1
0.1
0.1
0.1
0.0010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.00010000000000000003
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002
1.0000000000000004e-05
0.00010000000000000003
0.00010000000000000003
0.00010000000000000003
0.00010000000000000003
1.0000000000000004e-06

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章