MXNet与其他深度学习框架有哪些不同?文末有辛苦争取的福利
做积极的人,坚持自己的梦想
作者简介:网易杭州研究院资深AI算法工程师和计算机视觉工程师,在MXNet、Pytorch、深度学习相关算法等方面有深入的研究和丰富的实践经验。
目前大部分深度学习框架都已开源,不仅提供了多种多样的接口和不同语言的API,而且拥有详细的文档和活跃的社区,因此设计网络更加灵活和高效。另外,几乎所有的深度学习框架都支持利用GPU训练模型,甚至在单机多卡和分布式训练方面都有很好的支持,因此训练模型的时间也大大缩短了。深度学习框架的这些优点让其在开源之初就大受欢迎,同时大大加速了学术界和工业界对深度学习算法的研究,所以最近几年各领域的算法模型如雨后春笋般不断刷新各种指标。
目前主流的深度学习框架不到10个,而且大部分框架都由大公司的工程师在维护,代码质量非常高,选择一个合适的框架不仅能加快算法的优化产出,还能提高线上部署的效率。当然不同高校实验室或者企业团队所用的深度学习框架都不大一样,不过你不用担心现在所用的框架在以后的工作中用不到,毕竟各框架的设计理念都有许多相似之处,但我建议你至少要深入了解其中一个深度学习框架,多动手写代码,读一读该框架的源码,以求能够灵活使用该框架实现自己的想法,当然,如果你能对开源社区有一定的贡献并一起推动该框架发展那自然是再好不过了。下面我们来从今天的主角开始一一介绍:
MXNet是亚马逊(Amazon)官方维护的深度学习框架。MXNet的前身是cxxnet。2015年年底,cxxnet正式迁移至MXNet,并在2016年年底成为Amazon的官方深度学习框架。MXNet采用的是命令式编程和符号式编程混合的方式,具有省显存、运行速度快等特点,训练效率非常高。2017年下半年推出的Gluon接口使得MXNet在命令式编程上更进一步,网络结构的构建更加灵活,同时混合编程的方式也使得Gluon接口兼顾了高效和灵活。2018年5月,MXNet正式推出了专门为计算机视觉任务打造的深度学习工具库GluonCV,该工具库提供了包括图像分类、目标检测、图像分割等领域的前沿算法复现模型和详细的复现代码,同时还提供了常用的公开数据集、模型的调用接口,既方便学术界研究创新,也能加快工业界落地算法。
PyTorch是Facebook官方维护的深度学习框架之一,是基于原有的Torch框架推出的Python接口。Torch是一种深度学习框架,其主要采用Lua语言,与主流的Python语言相比,学习Lua语言需要一定的成本,因此为了更加便于用户使用,基于Torch开发出了Python接口并不断优化,从而诞生了PyTorch。PyTorch采用的是命令式编程,搭建网络结构和调试代码非常方便,因此其很适合用于学术界研究试错,相信用过PyTorch的同学都会为该框架的灵活性所吸引。PyTorch于2017年年初开源,虽然比其他大部分深度学习框架开源时间要晚,但快速发展的PyTorch目前拥有较为完善的接口和文档,在众多深度学习框架中已经是出类拔萃、深受追捧。
TensorFlow是Google官方维护的深度学习框架。TensorFlow自2015年年底开源以来,在GitHub上的火热程度非同一般,也是目前使用最广泛的深度学习框架之一。TensorFlow为用户提供了丰富的接口、完善的社区、可视化工具TensorBord等。尤其是可视化工具TensorBord可以让用户查看和记录模型训练过程中的参数变化情况,从而方便对模型进行调优。经过几年的发展壮大,完善的生态为TensorFlow积累了越来越多的用户,这对于一个深度学习框架而言非常重要。
除了前面提到的几个深度学习框架之外,还有一些深度学习框架也非常受欢迎。Keras,一个基于TensorFlow和Theano且提供简洁的Python接口的深度学习框架,上手非常快,受欢迎程度非常高。Theano,老牌的深度学习框架之一,由蒙特利尔大学的机器学习团队开发,不过Theano的开发者在2017年下半年时宣布将终止Theano的开发和维护。CNTK,微软官方维护的深度学习框架,也是基于符号式编程。PaddlePaddle,百度官方维护的深度学习框架,是国内公司最早开源的深度学习框架。
MXNet的优势
在众多主流的深度学习框架中,很难说哪一个在各方面都占有绝对优势,但是假如你选择MXNet进行深度学习算法的开发和部署,相信你一定能体会到其运行速度快、省显存等优点。另外随着MXNet的不断推广,相关的学习资料也越来越多,社区越来越壮大,这对于MXNet而言是非常利好的。
MXNet从开源起就将命令式编程和符号式编程无缝衔接在一起,比如在设计神经网络结构时采用符号式编程得到计算图,然后根据计算图进行一系列的优化从而提高性能,而在训练模型过程中涉及的逻辑控制操作则可以通过命令式编程的方式实现。因此MXNet在灵活和高效之间取得了非常好的平衡,这使得MXNet不仅适合于学术界研究试错,也适合工业界进行线上部署。事实上,成功很少会有捷径,MXNet虽然是2015年年底开源,但在开源之前其实经历了较长的开发期,属于典型的厚积薄发。
就像任何事物都有两面性一样,几个主流的深度学习框架也各有优缺点。Caffe框架作为最优秀的深度学习框架之一,一直深受广大用户的欢迎,其优点是非常容易上手,积累的用户也很多;缺点是安装比较麻烦,会涉及各种环境依赖,另外要想灵活应用的话对新手而言还是比较困难的,而且该框架本身比较占用显存。TensorFlow是目前应用最为广泛的深度学习框架,TensorFlow的优点在于丰富的接口以及Google的强大技术支持,从开源以来,其积累了非常多的用户,并且随着学术界和工业界的不断推广,TensorFlow的用户群体也在不断壮大。TensorFlow宏观来看就是“大而全”,这种特点带来的问题就是其接口过于丰富,因此对于新人而言入门较难,往往会面临的问题是要实现一个简单的层却不知道该选择什么样的接口。PyTorch作为主流的深度学习框架中的后起之秀,是在原来已有的Torch框架上封装了Python接口并优化而成的,相信很多使用过PyTorch的读者都会被PyTorch的简洁所吸引,这得益于其命令式编程的设计方式,因此非常适合用于搞研究,或者称为快速试错;当然纯命令式编程的方式带来的问题是工业界线上部署的效率问题,所以Facebook内部对PyTorch的定位也是研究首选,而线上部署方面则是首选Caffe/Caffe2。另外由于PyTorch目前还在快速迭代中,所以文档和接口变化较大,新手需要一定的时间来适应。
那么为什么我推荐使用MXNet呢?有以下几个原因。
1)MXNet结合了命令式编程和符号式编程,因此兼顾了灵活和高效,既方便研究试错又适合线上部署。
2)框架比较稳定。MXNet从开源至今已经经历了早期开发时频繁迭代的阶段,目前接口基本上比较稳定,这将大大降低代码维护的成本。
3)MXNet在显存方面的优化做得非常好,可以帮助你节省机器资源,而且在训练相同的模型时,MXNet比大多数的深度学习框架的训练速度要快,这也能节省不少的训练时间。
4)MXNet安装方便,文档清晰,例子丰富,非常方便新人上手学习。
总结起来,对于深度学习框架而言,没有最好的,只有最适合的。如果在高校做研究,那么我会推荐使用MXNet或者PyTorch,这两者非常便于设计网络结构和调试;如果是在工业界需要上线部署模型,那么我会推荐使用MXNet、TensorFlow或Caffe。
以上内容摘自魏凯峰老师的新书《MXNet深度学习实战:计算机视觉算法实现》,感兴趣的话欢迎去买一本支持哦~
推荐语:《MXNet深度学习实战:计算机视觉算法实现》,由网易资深计算机视觉算法工程师撰写,从算法实现和框架原理2个维度详细讲解计算机视觉算法的实现和MXNet框架的使用与原理
扫码了解详情
扫码回复送书👆
『SHIORI Notebook』送3本
扫码回复送书👆
『AI算法与图像处理』送3本
扫码回复送书👆
『计算机视觉联盟』送3本
扫码回复送书👆
『逆锋起笔』送3本
扫码回复送书👆
『小白学视觉』送3本
加群交流
扫码添加助手,可申请加入AI_study-目标检测交流群。一定要备注:目标检测+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡西),不根据格式申请,一律不通过。
喜欢就点个"在看"呗^_^