三三文章网 - 科技知识大全是专业科技新媒体网站。网站著眼于新一代科技新闻的全面及时处理报导,让网民在外面第二时间交待全球新一代的科技资讯。内容涵括AI+、互联网、IT、创业投资、核定、区块链、智能硬件等领域

比使用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%的准确率。

“这只不过是Hello World的案例而已”对于这最后的结果,有人看惯了:

另外,也有网友认为大多数人的工作并不是像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/