天天看点

pytorch动态调整学习率之Multistep策略

    在过去的文章中讲到学习率的动态调整问题,同时在《影响网络模型性能的主要因素》这篇文章中提到,根据经验学习率的调整最好的方法是Step和Multistep,已经讲过了epoch_step策略,下来讲一下Multistep策略。

    首先讲一下Step和Multistep的区别。这两种方法都是step对学习率进行操作,但是二者还是有一定的区别的。最主要的区别就是:Step策略是根据固定的步长对学习率进行调整,而Multistep策略则是根据非均匀步长对学习率进行调整。一般情况下,这两种方法都是根据步长对学习率进行降低操作。Multistep策略需要指定每次降低学习率的间隔,比如在迭代10、15、25、30次后对学习率进行必要的调整,可以在此四次调整过程中学习率降低为原来的0.1倍。

    pytorch提供了此方法的接口,具体代码如下所示:

model = ANet(classes=5)     #加载模型
optimizer = optim.SGD(params = model.parameters(), lr=0.05)   #优化方法使用SGD

#在指定的epoch值,如[10,15,25,30]处对学习率进行衰减,lr = lr * gamma
scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[10,15,25,30], gamma=0.1)
           

    Multistep策略其实本质上就是分段函数的计算方法,可以根据所需要的迭代次数自由修改milestones的值,如milestones=[100,500,2000]。如上程序学习率的下降趋势如下图所示。

pytorch动态调整学习率之Multistep策略

继续阅读