trainer = torch.optim.SGD(net.parameters(), lr=lr, momentum=0.9,weight_decay=wd)
scheduler = torch.optim.lr_scheduler.StepLR(trainer, lr_period, lr_decay)
官网的参数结构:
第一个参数就是所使用的优化器对象
第二个参数就是每多少轮循环后更新一次学习率(lr)
第三个参数就是每次更新lr的gamma倍
为啥要调整学习率?
假设函数为 f ( x ) = x 2 f(x) = x^2 f(x)=x2 每次更新的x应为 x -= dx * lr 其中dx为对x的一阶求导,所以如果lr一直不变,x在绝大多数情况下不会取到最低点的 x 0 x_0 x0的值,所以f(x)的值一直在最低点左右震荡,如下图的绿色箭头所示,但是如果不断调整学习率则可以使结果在离最优点 x 0 x_0 x0的位置更近,则f(x)的值更优,这也就是我们更想要的结果。