天天看点

Pytorch几种常用的学习率调整方式前言:

前言:

由于在深度学习中, 优化器的学习率需要不断地调整,今天就来总结一下几种常用的学习率调整方法.

一. step

采用均匀降低的方式, 比如每次降低为原来的0.1倍.

lr = self.lr * (gamma ** (epoch // self.lr_step))
#self.lr: 初始学习率
#gamma:  每次衰减的倍数
#epoch: 当前的轮数
#self.lr_step: 学习率衰减间隔的epoch数
           

pytorch中的函数方法:

Pytorch几种常用的学习率调整方式前言:

二. multistep

采用非均匀降低的策略, 非均匀主要指降低的step间隔不是均匀的.

pytorch中的函数方法:

Pytorch几种常用的学习率调整方式前言:

三. poly策略

lr = self.lr * pow((1 - 1.0 * iter / maxiter), power)
# iter = epoch * iters_per_epoch + i
# maxiter = num_epochs * iters_per_epoch
# power用来控制学习率曲线的形状, power<1, 曲线凸起来,下降慢后快 ;power>1, 凹下去, 下降先快后慢
           

四. 余弦退火学习率调整(Cosine )

随着迭代次数的增加,余弦值首先缓慢下降吗然后加速下降, 再次缓慢下降.

lr = 0.5 * self.lr * (1 + math.cos(1.0 * iter / maxiter * math.pi))
           

pytorch中的函数方法如下:

Pytorch几种常用的学习率调整方式前言:

五. SGDR调整(带重启的SGD算法)

在训练时,梯度下降算法可能陷入局部最小值,而不是全局最小值, 梯度下降算法可以通过突然提高学习率来跳出局部最小值并找到通向全局最小值的路径.这种方式被成为带重启的随机梯度下降方法(stochastic gradient descent with restrats, SGDR).

pytorch中的函数方法如下:

Pytorch几种常用的学习率调整方式前言:

最后:

还是感觉step均匀下降最好用, 虽说学习率不是连续变化, 但是简单实用. 在每个批次保存模型的时候最好也能够保存其相应的学习率参数, 以便于下次可以接着训练(防止训练过程因为意外而中断)

继续阅读