深度学习框架介绍
常见的深度学习框架总结:
深度学习框架有:Theano、TensorFlow、Keras、Caff/Caffe2、MXNet、Ptorch等
1.Theano
Theano最初诞生于蒙特利尔大学LISA实验室,于2008年开始开发,是第一个有较大影响力的Python学习框架。Theano诞生于研究机构,服务于研究人员,其设计具有较浓厚的学士气息,但在工程设计上有较大的缺陷。其调试困难、构建图慢等缺点为人所诟病。2017年9月28号,深度学习三巨头之一Yoshua Bengio 宣布Theano即将停止对其开发。尽管Theano即将退出历史舞台,但是作为第一个Python学习框架,它很好的完成了自己的使命,为深度研究人员的早期拓荒提供了极大的帮助,同时也为之后深度学习框架的开发点奠定了基本设计方向:以计算图为架构的核心,采用GPU计算。
2.TensorFlow
TensorFlow最初是由Google机器智能研究部门的Google Brain团队开发,基于Google 2011年开发的深度学习基础架构DistBelief构建起来。Google在深度学习领域巨大的影响力和强大的推广能力,使得TensorFlow一经推出就获得了极大的关注,并迅速成为如今用户最多的深度学习框架。虽然TensorFlow是当前最流行的深度学习框架同时TensorFlow获得了极大的成功,但是对它的批评也不觉于耳,总结起来有:1.过于复杂的系统 2.频繁变动的接口 3.接口设计过于晦涩难懂 4.文档混乱脱节。另外即使ThensorFlow已经成为了如今最炙手可热的深度学习框架,但是TensorFlow离其最初的设计目标还很遥远。另外,Google对TensorFlow略显严格的把控,目前各大公司都在研发自己的深度学习框架。
3.Keras
Keras是一个高级的神经网络API,由纯的Python编写而成并使用TensorFlow、Theano及CNTK作为后端。严格意义上来讲,Keras并不能称为一个深度学习框架,它更像是一个深度学习接口,它构建于第三方框架之上。Keras应该是深度学习中最容易上手的一个,但是其多度的封装导致其丧失灵活性,由于做了层层封装导致用户在新增操作或是获取底层的数据信息时过于困难。同时,过度封装也使得Keras的程序过于缓慢,在绝大场景中,Keras是所有深度学习框架中速度最慢的。学习Keras是十分容易的,但是很快学习就会遇到相应的瓶颈。
4.Caff/Caffe2
Caffe:Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,核心的语言是C++,它支持Python和Matlab接口,既可以在CPU,也可以在GPU上运行。Caffe的优点是简洁快捷,缺点是缺少灵活性 。不同于Keras因为太多的封装而丧失灵活性,Caffe灵活性的缺失主要是因为它的设计。在Caff中最主要的抽象对象是层,每实现一个新的层,必须要利用C++实现它的前向传播和反向传播的代码,而如果想要新层运行在GPU上,那么还需要利用CUDA实现这一层的前向传播和反向传播。这对于不熟悉C++和CUDA的用户扩展Caffe是十分困难的。尽管Caffe曾今几乎占据了深度学习框架的半壁江山,但是在真正深度学习时代来临之时,Caffe已经表现出了力不从心,尽管现在在GitHub上还能找到许多基于Caffe的项目,但是新的项目已近越来越少。尽管Caffe的作者之后后在Caffe的基础上开发了Caffe2,Caffe2继承了Caffe2的优点,但是在速度上有了很大的改进。Caffe2的设计追求轻量级,在保有扩展性和性能的同时,Caffe2也强调了便携性 。虽然如今Caffe已经很少用于学术界,但是依然有少数的计算机视觉的论文使用的是Caffe。由于其稳定、出众的性能,不少公司依然在使用Caffe部署模型。
5.MXNet
MXNet是一个深度学习库,支出C++、Python、R、Scala、Julia、Matlab及JavaScript等语言;支持命令和符号编程;可以运行在CPU、GPU、集群、服务器、台式机或者移动设备上。
MXNet 以其超强的分布式支持、明显的内存、现存优化为人所称道。但是其最初是一群学生开发的,缺乏商业应用,极大的限制了MXNet的使用。同时MXNet长期处于快速迭代的过程,其文档却长时间未更新,导致新手用户难以掌握MXNet,老手常常需要查阅源码才能真正的理解MXNet接口的用法。
6.Ptorch
Ptorch的Logo解释:英文Torch是火炬的意思,所以Logo中有火焰。Pytorch是当前难得的简洁高效快速的框架。在当前开源的框架中没有一个框架能够在灵活性、易用性、速度这三个方面有两个能同时超过Ptorch。Ptorch以其简洁的代码、速度上的优势、易用性以及活跃的社区越来越受到越多人的追捧。用TensorFlow实现的代码,用Ptorch能轻松实现。如今Ptorch正如其越来越火的社区一样,越发充满生命力,深度学习时代Ptorch必将引领深度学习。
虽然Pytorch采用了动态图给使用者带来了极大的灵活性,但是事物总是具有两方面的,动态图也不是十全十美的。有许多针对动态的批评者认为动态图不能像静态计算图那样进行性能优化。Pytorch 的缺陷根据书本主要有一下三方面:1.分布式并行支持有限 2.难以部署到生产环境。3.某些场景下性能缺失。如今是各个框架并行的时代,每个框架的存在自然有其合理性,“一个框架通知”的思想不仅可能会影响性能,更会无形中加大框架本身的复杂性。研究和生产是两个相对独立的环节,指望通过研究的代码(Ptorch)来指导用于生产环境的有点不切实际。生产环境受到很多因素的制约,其特点决定了与研究有很大的不同。个人认为需要辩证的看待各个框架。
参考深度学习框架 Pytroch入门与实践