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