深度学习——查找学习率

我们在训练神经网络模型时,能修改最多的超参数就是学习率,但是大部分方法都只是提议使用一个相当小的数,让自己试验不同的值。因此,很多人都是以这种方式来为他们的架构发现最优学习率,通常会采用一种称为网格搜索(grid search)的技术,就是穷尽搜索一个学习率值的子集,将结果与一个验证数据集比较。这会浪费大量的时间。
这里提出一个更为简洁、快速的方法,以便我们找到合适的学习率这种方法是:在一个epoch期间,首先从一个小的学习率开始,每一个小批次增加到一个更大的学习率,直到这个epoch结束时得到一个很大的学习率。计算每一个学习率的相应损失,然后查看一个图,选出使损失下降最大的学习率。
更为细致的内容参看:Lesile Smith的“Cyclical Learning Rates for Trainng Neural Networks”
我们需要做的是,迭代各个批次,基本上照常训练,将输入传入模型,然后得到这个批次的损失。记录目前位置的best_loss,将新损失值与它比较。如果新的损失大于best_loss的4倍,就退出函数,返回目前得到的结果的对数,再在下一步更新学习率,直到循环结束时达到最大学习率。然后使用matplot画图:

logs,loss=find_lr()
plt.plot(logs,losses)
found_lr=1e-2

这里我们只返回了学习率对数和损失的片段。这样做只是因为开始和最后的几个训练往往不会告诉我们太多信息(特别是如果学习率很快变得非常大的情况下)。
:文章选自《基于PyTorch的深度学习》Ian Pointer著

你可能感兴趣的:(pytorch深度学习,深度学习,学习,pytorch)