<
>

比用Pytorch框架快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

2021-08-13 09:47:12 来源:量子位 作者:

 

本文经AI新媒体量子位(大众号ID:QbitAI)授权转载,转载请联络出处。

在MNIST上进行练习,可以说是计算机视觉里的“Hello World”使命了。

而假如运用PyTorch的规范代码练习CNN,一般需求3分钟左右。

但现在,在一台笔记本电脑上就能将时刻缩短200多倍。

速度直达0.76秒

那么,到底是怎么仅在一次epoch的练习中就到达99%的准确率的呢?

八步提速200倍

这是一台装有GeForce GTX 1660 Ti GPU的笔记本。

咱们需求的还有Python3.x和Pytorch 1.8。

先下载数据集进行练习,每次运转练习14个epoch。

这时两次运转的均匀准确率在测验集上为99.185%,均匀运转时刻为2min 52s ± 38.1ms。

接下来,便是一步一步来削减练习时刻:

比用Pytorch结构快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

一、提早中止练习

在阅历3到5个epoch,测验准确率到达99%时就提早中止练习。

这时的练习时刻就削减了1/3左右,到达了57.4s±6.85s。

二、缩小网络规划,选用正则化的技巧来加快收敛速度

详细的,在第一个conv层之后添加一个2x2的最大采样层(max pool layer),将全衔接层的参数削减4倍以上。

然后再将2个dropout层删掉一个。

这样,需求收敛的epoch数就降到了3个以下,练习时刻也削减到30.3s±5.28s。

三、优化数据加载

运用data_loader.save_data(),将整个数据集以之前的处理方式保存到磁盘的一个pytorch数组中。

也便是不再一次一次地从磁盘上读取数据,而是将整个数据集一次性加载并保存到GPU内存中。

这时,咱们只需求一次epoch,就能将均匀练习时刻下降到7.31s ± 1.36s。

四、添加Batch Size

将Batch Size从64添加到128,均匀练习时刻削减到4.66s ± 583ms。

五、进步学习率

运用Superconvergence来替代指数衰减。

在练习开始时学习率为0,到中期线性地最高值(4.0),再慢慢地降到0。

比用Pytorch结构快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

这使得咱们的练习时刻下降到3.14s±4.72ms。

六、再次添加Batch Size、缩小缩小网络规划

重复第二步,将Batch Size添加到256。

重复第四步,去掉剩下的dropout层,并经过削减卷积层的宽度来进行补偿。

最终将均匀时刻降到1.74s±18.3ms。

七、最终的微调

首要,将最大采样层移到线性整流函数(ReLU)激活之前。

然后,将卷积核巨细从3添加到5.

最终进行超参数调整:

使学习率为0.01(默以为0.001),beta1为0.7(默以为0.9),bata2为0.9(默以为0.999)。

到这时,咱们的练习现已削减到一个epoch,在762ms±24.9ms的时刻内到达了99.04%的准确率。

比用Pytorch结构快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

“这仅仅一个Hello World事例”

关于这最终的成果,有人觉得习以为常:

优化数据加载时刻,缩小模型尺度,运用ADAM而不是SGD等等,都是常识性的作业。

我想没有人会真的操心去加快运转MNIST,由于这是机器学习中的“Hello World”,要点仅仅像你展现最小的关键值,让你了解这个结构——事实上3分钟也并不长吧。

比用Pytorch结构快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

而也有网友觉得,大多数人的作业都不在像是MNIST这样的超级集群上。因而他表明:

我所期望的是作业更多地会集在真实最小化练习时刻方面。

比用Pytorch结构快200倍!0.76秒后,笔记本上的CNN就搞定了MNIST

GitHub:
https://github.com/tuomaso/train_mnist_fast

暂时禁止评论

微信扫一扫

易采站长站微信账号