比使用Pytorch帧快200倍!0.76秒后,注释CNN完成MNIST-开源-量子比特
- 时间:
- 浏览:0
在NIST进行训练,可以说是计算机视觉中“Hello World”的任务。
另一方面,使用PyTorch的标准代码训练CNN时,一般需要3分钟左右。
但是,一台笔记本电脑可以缩短200倍以上的时间。
速度直达0.76秒!
那么,您是如何仅在epoch培训一次就达到99%的精确度的呢。
这是一款搭载GeForce GTX1660 Ti GPU的笔记本电脑,8步速度提高200倍。
需要的是Python3.x和Pytorch1.8。
首先下载数据集进行培训,一次运行14个epoch。
此时两次运行的平均精度在试验组上为99.185%,平均运行时间为2min52s±38.1ms。
其次是减少训练时间的一步。
经过35个epoch,当测试精度达到99%时,提前停止训练。
此时训练时间减少约1/3,达57.4s±6.85s。
二、缩小网络规模,运用归一化技术加快收敛速度
具体来说,在第一个conv层之后添加2#215。2的最大采样层(max pool layer),使全部连接层的参数减少4倍以上。
然后删除两个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。
五、提高学习率
使用超convergence代替指数衰减。
训练开始时学习率为0,中期线性达到最高值(4.0),再缓慢降至0。
由此,训练时间降低到3.14s±4.72ms。
六、再次增加Batch Size,缩小网络规模
重复步骤2,将批大小增加到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%的准确率。
另外,也有网友认为大多数人的工作并不是像MNIST这样的超级集群。所以他说
GitHub:https://GitHub.com/tuomaso/train_mnist_fast
参考链接:[1]https://www.reddit.com/r/MachineLearning/comments/p1168k/p_training_cnn_to_99_on_mnist_in_less_than_1/