深度学习探秘:以DenseNet为实例的运算性能与模型结构分析

1 引言

作为CVPR 2017最佳论文奖的Densely Connected Convolutional Networks ,一经公开就受到了广泛的关注,DenseNet在参数,计算量和网络性能等各方面表现都很出色,它的创新思想也给了所有深度学习的研究者巨大的启发。
令人遗憾的是,国内国外不少深度学习爱好者都对DenseNet在内存(本系列中不特殊说明的话,内存是指GPU内的memory)方面的消耗有一些疑惑,尽管DenseNet论文作者做了清楚的说明,也完成了Memory Efficient Implementation of DenseNets,但很多人仍旧人云亦云,也没有自己进行试验和分析。本系列的第二篇文章会对这一点进行详细探讨。

需要说明的是,本系列不是对DenseNet的介绍文章,而是以DenseNet作为实例,来尝试对深度学习系统进行工程化的分析,主要在训练、运算性能和模型结构三个方面来讨论。

2 代码实现简介

包括论文作者的代码在内,DenseNet已经有很多实现了,不过为了复现论文的结果,我仍旧自己做了一个实现,应该说还是比较准确的复现了论文的。

全部代码见:https://github.com/seasonyc/densenet,基于Keras开发,模型的代码和训练的代码分别在densenet.py和cifar10-test.py两个文件里,对于有经验的读者应该没有什么困难,所以就不多解释了。系列的第一篇文章会结合代码阐述一些细节。

3 本系列内容简介

由于网上已经有了大量的对DenseNet的解读,所以本文不准备重复这些内容,而是结合我的实现和复现的过程,分享深度学习训练的一些经验和其他人没有谈到的一些对DenseNet的理解和细节。如果读者对DenseNet还没有什么了解,请先行阅读论文或谷歌百度一下DenseNet。

本系列一共由三部分组成,各部分比较独立,所以实际上读者可以不按顺序阅读。

  • 系列的第一部分是DenseNet训练中的一些经验和实践,但和DenseNet的直接关系并不大,可以当作深度学习的通用知识来阅读。只对DenseNet感兴趣的读者可以直接阅读后两个部分,但如果读者想亲自复现一下DenseNet论文的结果,读一下这部分应该会有帮助。另外,第5节的内容,在别的文章中较少讨论过,希望对读者有所帮助。
  • 第二部分是有关神经网络性能分析的,目前有关这个话题的文章并不多,本文专门针对DenseNet模型进行了较为详尽的分析。
  • 本系列的最后一部分简要讨论了DenseNet网络的核心概念,对模型结构进行了一些探讨,并使用可视化技术进行了分析,进而指出DenseNet论文中的一个错误(为避免歧义,请允许我使用“错误”这个词)。

由于篇幅的原因,本文在讨论有些内容的时候,并未对一些预设的知识进行说明,还望读者谅解。

你可能感兴趣的:(人工智能,深度学习与人工智能)