学习速率搜索

学习速率是训练DNN模型的一个关键参数。过大的学习速率设置会导致训练过程不收敛,过小的学习速率会导致收敛速度缓慢。本篇博客将介绍一种现有论文中的学习速率的选取方法。

这种方法作为一种最佳实践,也被Fast AI库所采纳。博主的初衷是使用Fast AI所提供的API,便捷地实现这种搜索方法。但在实践过程中却发现Fast AI已经从1.0版本升级到了2.0版本,其很多功能的实现方式发生了变化。之前博主基于Fast AI 1.0所探讨的一些扩展技能都不再适用。有鉴于此,为避免Fast AI版本变更导致的技能点失效,本篇博文不但将介绍基于Fast AI的懒人方法,还将介绍其具体步骤。如此,基于naivepytorch的实现也很easy

博文主要内容如下:第一部分将给出学习速率选取方法的流程图,并论述实现过程中所需注意的要点。第二部分将介绍如何在自定义的应用场景中使用Fast AI的相关方法。第三部分给出了不同实现方式的结果。最后将给出相关的参考链接。

一、学习速率搜索方法

方法流程图及注意要点如下图所示,其基本流程是设置不同的学习速率,每个学习速率训练一个batch,由loss值的变化趋势来选取合适的学习速率。

图 1. 学习速率搜索流程

二、Fast AI中的lr_find()

Fast AI中的lr_find()的方法,是关联于Learner对象的。为在自定义应用场景中使用lr_find()方法,我们需要将自定义的datamodelloss functionoptimizer等深度学习所需要素封装为Learner对象。

1. 将pytorchDataset转换为Fast AIDataloaders
data = DataLoaders.from_dsets(train_ds, valid_ds, bs=128).cuda()

注意:batch_size参数的默认值为64

2. 将pytorchoptim实例转换为Fast AIloss_func
# ps: param_set.
def opt_func(ps, lr): return OptimWrapper(optim.SGD(ps, lr=lr, momentum=0.9, weight_decay=1E-4))
3. 构建Fast AILearner对象
# criterion is same as the conventional loss functions in pytorch
learn = Learner(data, model, loss_func=criterion, opt_func=opt_func, metrics=accuracy)

注意:opt_func默认选择Adam优化器。

然后就可使用learn.lr_find()函数了,所需参数均有默认值。

三、在MNIST数据上的结果

相关结果如下,每种实现都会依据loss最小以及loss下降最速的准则给出两个建议值。其中基于pytorch的方法给出的建议值分别为0.0630.302,基于Fast AI的方法给出的建议值分别为0.1580.251

图 2. 在MNIST数据上的结果:左—pytorch,右—Fast AI

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值