一文看懂6个深度学习著名框架,你用过几个?


导读: 近几年,深度学习技术的大爆炸式发展,除了理论方面的突破外,还有基础架构的突破,这些都奠定了深度学习繁荣发展的基础。本文将对其中涌现出的几个著名的深度学习平台进行简要介绍。

作者:魏溪含 涂铭 张修鹏

如需转载请联系华章科技

一文看懂6个深度学习著名框架,你用过几个?

01 Theano

Theano是在BSD许可证下发布的一个开源项目,是由LISA集团(现MILA)在加拿大魁北克的蒙特利尔大学开发的,其是以一位希腊数学家的名字命名的。

一文看懂6个深度学习著名框架,你用过几个?

Theano是一个Python库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。它的诞生是为了执行深度学习中的大规模神经网络算法,从本质上而言,Theano可以被理解为一个数学表达式的编译器:用符号式语言定义程序员所需的结果,并且Theano可以高效地运行于GPU或CPU中。

在过去很长一段时间内,Theano是深度学习开发与研究的行业标准。而且,由于出身学界,它最初是为学术研究而设计的,这也导致深度学习领域的许多学者至今仍在使用Theano。

但随着Tensorflow在Google的支持下强势崛起, Theano日渐式微,使用Theano的人也越来越少。 这个转变的标志性事件是:创始者之一的Ian Goodfellow放弃Theano转而去Google开发Tensorflow了。

尽管Theano已退出历史舞台,但作为Python的第一个深度学习框架, 它很好地完成了自己的使命,为深度学习研究人员的早期拓荒提供了极大的帮助 ,同时也为之后的深度学习框架的开发奠定了基本的设计方向:以计算图为框架的核心,采用GPU加速计算。

  • 总结: 对于深度学习新手,可以使用Theano来练手;但对于职业开发者,建议使用Tensorflow。

02 Tensorflow

2015年11月10日,Google宣布推出全新的机器学习开源工具Tensorflow。Tensorflow最初是由Google机器智能研究部门的Google Brain团队开发,基于Google 2011年开发的深度学习基础架构DistBelief构建起来的。

一文看懂6个深度学习著名框架,你用过几个?

Tensorflow是广泛使用的实现机器学习以及其他涉及大量数学运算的算法库之一。 Google几乎在所有应用程序中都使用Tensorflow来实现机器学习。例如,如果你使用过Google照片或Google语音搜索,那么你就间接使用了Tensorflow模型。它们在大型Google硬件集群上工作,在感知任务方面,功能非常强大。

Tensorflow在很大程度上可以看作是Theano的后继者 ,不仅因为它们有很大一批共同的开发者,而且它们还拥有相近的设计理念:它们都是基于计算图实现自动微分系统。Tensorflow使用数据流图进行数值计算,图中的节点代表数学运算,图中的边则代表在这些节点之间传递的多维数组(tensor)。

Tensorflow编程接口支持Python和C++。随着1.0版本的公布,Java、Go、R和Haskell API的alpha版本也得到支持。此外,Tensorflow还可在Google Cloud和AWS中运行。

Tensorflow还支持Windows 7、Windows 10和Windows Server 2016。由于Tensorflow使用C++ Eigen库,所以库可在ARM架构上进行编译和优化。这也就意味着用户可以在各种服务器和移动设备上部署自己的训练模型,而无须执行单独的模型解码器或者加载Python解释器。

作为当前最流行的深度学习框架,Tensorflow获得了极大成功,但在学习过程中读者需要注意下面这些问题。

  • 由于Tensorflow的接口一直处于快速迭代之中,并且版本之间存在不兼容的问题,因此开发和调试过程中可能会出现一些问题(许多开源代码无法在新版的Tensorflow上运行)。
  • 想要学习Tensorflow底层运行机制的读者需要做好准备,Tensorflow在GitHub代码仓库的总代码量超过100万行,系统设计比较复杂,因此这将是一个漫长的过程。
  • 代码层面,对于同一个功能,Tensorflow提供了多种实现,这些实现良莠不齐,使用中还存在细微的区别,请读者注意,避免入坑。另外,Tensorflow还创造了图、会话、命名空间、PlaceHolder等诸多抽象概念,对普通用户来说可能会难以理解。
  • 总结: 凭借着Google强大的推广能力,Tensorflow已经成为当今最为热门的深度学习框架,虽不完美但是最流行,目前,各公司使用的框架也不统一,读者有必要多学习几个流行框架以作为知识储备,Tensorflow无疑是一个不错的选择。

项目地址:

https://github.com/tensorflow/tensorflow

03 MXNet

MXNet是亚马逊(Amazon)的李沐带队开发的深度学习框架。它拥有类似于Theano和Tensorflow的数据流图,为多GPU架构提供了良好的配置,有着类似于Lasagne和Blocks的更高级别的模型构建块,并且可以在你想象的任何硬件上运行(包括手机)。


一文看懂6个深度学习著名框架,你用过几个?


对Python的支持只是其功能的冰山一角,MXNet同样提供了对R、Julia、C++、Scala、Matlab、Golang和Java的接口。

MXNet以其超强的分布式支持,明显的内存、显存优化为人所称道。同样的模型,MXNet往往占用更小的内存和显存,并且在分布式环境下,MXNet展现出了明显优于其他框架的扩展性能。

MXNet的缺点是推广不给力及接口文档不够完善。 MXNet长期处于快速迭代的过程中,其文档却长时间未更新,这就导致新手用户难以掌握MXNet,老用户则需要常常查阅源码才能真正理解MXNet接口的用法。

  • 总结: MXNet文档比较混乱导致其不太适合新手入门,但其分布性能强大,语言支持比较多,比较适合在云平台使用。

项目主页:

https://mxnet.incubator.apache.org/

04 Keras

Keras是一个高层神经网络API,由纯Python语言编写而成,并使用Tensorflow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够将想法迅速转换为结果。

一文看懂6个深度学习著名框架,你用过几个?

Keras应该是深度学习框架之中最容易上手的一个 ,它提供了一致而简洁的API,能够极大地减少一般应用下用户的工作量,避免用户重复造轮子,而且Keras支持无缝CPU和GPU的相互转换。

为了屏蔽后端的差异性,Keras做了层层封装,导致用户在新增操作或是获取底层的数据信息时过于困难。同时,过度封装也使得Keras的程序过于缓慢,许多bug都隐藏于封装之中。

另外就是 学习Keras十分容易,但是很快就会遇到瓶颈,因为它缺少灵活性。 另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学习到深度学习的内容。

  • 总结: Keras比较适合作为练习使用的深度学习框架,但是因为其过度的封装导致并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。

项目主页:

https://keras.io

05 PyTorch

PyTorch是一个Python优先的深度学习框架,能够在强大的GPU加速的基础上实现张量和动态神经网络。

一文看懂6个深度学习著名框架,你用过几个?

PyTorch是一个Python软件包,其提供了两种高层面的功能,具体如下。

  1. 使用强大的GPU加速的Tensor计算(类似于Numpy)。
  2. 构建基于tape的autograd系统的深度神经网络。
  3. 活跃的社区:PyTorch提供了完整的文档,循序渐进的指南,作者亲自维护论坛以供用户交流和求教问题。Facebook人工智能研究院(FAIR)对PyTorch提供了强力支持,作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续的开发更新,而不至于像许多由个人开发的框架那样昙花一现。

如有需要,你也可以复用你喜欢的Python软件包(如Numpy、scipy和Cython)来扩展PyTorch。

相对于Tensorflow,PyTorch的一大优点是,它的图是动态的,而Tensorflow等都是静态图,不利于扩展。同时, PyTorch非常简洁,方便使用。

  • 总结: 如果说TensorFlow的设计是“Make It Complicated”,Keras的设计是“Make It Complicated And Hide It”,那么PyTorch的设计真正做到了“Keep it Simple,Stupid”。

项目地址:

http://pytorch.org/

06 Caffe

Caffe是基于C++语言编写的深度学习框架,作者是中国人贾扬清。它开放源码(具有Licensed BSD),提供了命令行,以及Matlab和Python接口,清晰、可读性强、容易上手。

一文看懂6个深度学习著名框架,你用过几个?

Caffe是早期深度学习研究者使用的框架,由于很多研究人员在上面进行开发和优化,因此其现今也是流行的框架之一。 Caffe也存在不支持多机、跨平台、可扩展性差等问题。初学者使用Caffe时还需要注意下面这些问题。

  1. Caffe的安装过程需要大量的依赖库,因此会涉及很多安装版本问题,初学者不易上手。
  2. 当用户想要实现一个新的层时,需要用C++实现它的前向传播和反向传播代码,而如果想要新层运行在GPU之上,则需要同时使用CUDA实现这一层的前向传播和反向传播。

Caffe2出自Facebook人工智能实验室与应用机器学习团队,但贾扬清仍是主要贡献者之一。Caffe2在工程上做了很多优化,比如运行速度、跨平台、可扩展性等,它可以看作是Caffe更细粒度的重构,但在设计上, 其实Caffe2与TensorFlow更像。 目前代码已开源。

一文看懂6个深度学习著名框架,你用过几个?

  • 总结: 至今工业界和学界仍有很多人在使用Caffe,而Caffe2的出现为我们提供了更多的选择。

项目地址:

Caffe:http://caffe.berkeleyvision.org/

Caffe2:https://caffe2.ai/

关于作者:魏溪含 ,爱丁堡大学人工智能硕士,阿里巴巴达摩院算法专家,在计算机视觉、大数据领域有8年以上的算法架构和研发经验。

涂铭,阿里巴巴数据架构师,对大数据、自然语言处理、图像识别、Python、Java相关技术有深入的研究,积累了丰富的实践经验。

张修鹏,毕业于中南大学,阿里巴巴技术发展专家,长期从事云计算、大数据、人工智能与物联网技术的商业化应用,在阿里巴巴首次将图像识别技术引入工业,并推动图像识别产品化、平台化。

本文摘编自《深度学习与图像识别:原理与实践》,经出版方授权发布。

一文看懂6个深度学习著名框架,你用过几个?

延伸阅读《深度学习与图像识别:原理与实践》

推荐语: 阿里巴巴达摩院算法专家、阿里巴巴技术发展专家、阿里巴巴数据架构师联合撰写,从技术原理、算法和工程实践3个维度系统展开,既适合零基础读者快速入门,又适合有基础读者理解其核心技术;写作方式上避开了艰涩的数学公式及其推导,深入浅出。