Pytorch基础知识-学习率衰减(learning rate decay)

2019-11-17 21:51:09 浏览数 (2)

学习率对整个函数模型的优化起着至关重要的作用。

如下图所示

上图的第一个图表明,若设置的learning rate较小,可能需要大量的计算时间才能将函数优化好。第二个图表明若设置的learning rate刚刚好,则比第一个图需要较少的时间就可完成优化。第三个图表明若设置的learning rate过大,则有可能造成整个函数loss忽大忽小,一直无法完成整个的优化。

由此看出选择合适的learning rate是很讲究技巧和偶然性的。但如果如下图所示,设置一个可以自动衰减的learning rate可能会在一定程度上加快优化。

学习率衰减(learning rate decay)对于函数的优化是十分有效的,如下图所示

loss的巨幅降低就是learning rate突然降低所造成的。

在进行深度学习时,若发现loss出现上图中情况时,一直不发生变化,不妨就设置一下学习率衰减(learning rate decay)。

具体到代码中

代码语言:javascript复制
class torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10,
verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-8)

# patience=10代表的是耐心值为10,
# 当loss出现10次不变化时,即开始调用learning rate decat功能
optimizer = torch.optim.SGD(model.parameters(),
                            args.lr,
                            momentum=args.momentum,
                            weight_decay=args.weight_decay)
scheduler = ReduceLROnPlateau(optimizer, 'min')
# min代表希望的目标减少的loss

scheduler.step(loss_val)
# 设置监听的是loss

另外也可以根据进行的epoch来设置learning rate decay

假设想

epoch进行小于20次时,learning rate 为0.05。

epoch进行到20次至40次时,learning rate 为0.005。

epoch进行到40次至60次时,learning rate 为0.0005。

...

则代码为

代码语言:javascript复制
scheduler = StepLR(optimizer, step_size=20, gama=0.1)
# StepLR为步进,step_size=20表示没20个epoch,步进为原来的gama=0.1
for epoch in range(100):
    scheduler.step()

0 人点赞