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