首页 > 推荐阅读

主流深度学习框架介绍和对比(12种)

随着深度学习的流行,深度学习的工具也越来越多,且影响力不可小觑。

深度学习可以使用的框架非常多,这些框架的热度各异。每个框架都有其拥护者,但是有些框架明显更受欢迎,比如 TensorFlow 和 Caffe,这是为什么?

面对如此多的深度学习框架,初学者应该怎样选择适合自己的框架呢?

下面来认识目前常用的几种深度学习框架以及它们的优劣。由于遇到不同的项目可能要使用不同的框架,另外我们自己使用的框架也并不是一成不变的,因此针对不同的开发场景和自身的需求,我们会转换深度学习的框架。

1. TensorFlow

TensorFlow 的官网地址为 https://www.tensorflow.org/

TensorFlow 逐渐成为最流行的深度学习框架,目前在 GitHub 中已经有 1500 多个与深度学习相关的包中提到了 TensorFlow,而其中只有 5 个是谷歌公司官方提供的,可想而知它的应用是多么广泛。

TensorFlow 在很大程度上推动了深度学习的发展,并成为这个行业的标准,目前可以说是深度学习的代名词了。

TensorFlow 支持 Python 和 C++,也允许使用 CPU 和 GPU 进行计算。

TensorFlow 是一个非常全面的框架,基本可以满足我们对深度学习的所有需求。但是,它的缺点是非常底层,使用 TensorFlow 需要编写大量的代码,而如果我们不想什么事都自己手动去写,就可以使用更简单、更高层的包——比如 Keras。

2. Caffe

从名字来看 Caffe(Convolutional Architecture for Fast Feature Embedding,卷积神经网络框架)就是一个专注于视觉领域的框架。

实际上,Caffe 可以算得上是老牌框架了,在计算机视觉系统的工具上,Caffe 是无可争议的领导者。但是 Caffe 的文档不够友好,安装的过程也是痛点,因为要求大量的依赖包,总的来说并不是一个适合深度学习入门者上手使用的框架。

3. MXNet

MXNet 诞生于分布式机器学习社区(DMLC),这个包是亚马逊公司选择的深度学习库,业界对其充满了信心。

MXNet 同时也是一个支持大多数编程语言的框架,支持的编程语言包括 Python、R、C++、Julia 等。由于目前支持R语言的深度学习框架并不是很多,因此使用R语言的开发者通常会选择 MXNet。

在使用体验上,MXNet 性能非常好,运行速度快,对 GPU 的要求也不高。但它的缺点是上手难度比较大,对于深度学习的新手有一定的技术要求。

4. PyTorch

PyTorch是近期比较热门的一个框架,其前身为 Torch。

Torch 本身是性能优良的框架,但选用的人不多,这是因为 Torch 基于一个不怎么流行的语言——Lua,在使用 Torch 前还必须学习 Lua 语言,这就大大增加了入门的难度。所以,在以 Python 为大趋势的深度学习环境中,脸书公司于 2017 年 1 月 18 日推出了 PyTorch,这一次再也没有编程语言问题了,PyTorch 于是以极迅猛的势头流行开来。

PyTorch 的官网是 http://pytorch.org/,配套的文档和教程十分完整和友好,推荐读者看一看。

5. Cognitive Toolkit(CNTK)

这是微软公司研究院维护的一套框架,通常被称作微软认知工具箱(Cognitive Toolkit),更广为人知的缩写是 CNTK。GitHub 的地址为 https://github.com/Microsoft/CNTK

相对来说 CNTK 并不是很流行,这可能和微软公司的推行力度不够有关。其实作为一个背靠微软研究院的框架,CNTK 的表现力还是很强劲的。但是和主流框架相比,CNTK 最大的劣势在于文档和社区支持度上,CNTK 有关的技术博客相对较少,在 Kaggle 中的相关讨论和在 StackOverFlow 上的提问也很少。

由于 CNTK 和 Keras 在 Python 上的语法非常类似,对于深度学习的入门者,我们推荐使用 Keras。鉴于微软研究院在深度学习方面的强大实力,建议读者持续关注此框架的发展。

6. Theano

Theano 是蒙特利尔大学 LISA 实验室推出的深度学习框架,它的官网地址为 http://deeplearning.net/software/theano

Theano 在日前已经宣布终止开发,这里简单了解一下即可。就深度学习而言,Theano 是很老牌的包,它具有优化的数值计算,曾用于很多深度学习包的开端。

如果读者是还没有上手深度学习框架的初学者,那么把 Theano 作为历史名词了解即可;如果读者曾经选用了 Theano,那么最相似、最直接的转换选择是 TensorFlow 或者 PyTorch。

7. DL4J

DL4J 的全称是 DeepLearning4J,是一套基于 Java 语言的深度学习工具包,由 Skymind 公司支持并维护,它的官网地址为 https://deeplearning4j.org/

DL4J 是很适合程序员和数据工程师的包。DL4J 兼容 JVM,也适用 Java、Clojure 和 Scala,并且包括了分布式、多线程的深度学习框架,这显然与大多数程序员日常编程的语言和工作环境相类似。

同时,DL4J 有着极其精美友好的文档和活跃的社区支持,社区中提供的科学论文、案例和教程都很有参考价值,推荐大家关注。

8. PaddlePaddle

PaddlePaddle 由百度公司在 2016 年 9 月推出,它的官网地址为 http://www.paddlepaddle.org/

至此,百度公司成为继谷歌公司、脸书公司、IBM 公司之后另一个将人工智能技术开源的科技巨头,同时也是国内首个开源深度学习平台的科技公司。Paddle 的全称是 Parallel Distributed Deep Learning,即并行分布式深度学习,是在百度公司内部已经使用多年的框架。

总的来说,PaddlePaddle 整体的设计和 Caffe 很像,对 Caffe 有一定了解的学习者应该很容易上手。

PaddlePaddle 打出的宣传语即是易学易用的分布式深度学习平台。同时,背靠百度公司扎实的开发功底,PaddlePaddle 也算是一个十分成熟、稳定可靠的开发工具。

9. Lasagne

Lasagne 是一个工作在 Theano 之上的包,它的官网地址为 https://lasagne.readthedocs.io/en/latest/index.html

同 Keras 的定位类似,此类搭建在低层框架(Theano)上的包,旨在降低深度学习算法的上手难度。

Lasagne 的优点在于它严谨的架构逻辑和较强的可适应性,但它的缺点是,作为一个老牌的包,和 Keras 相比,Lasagne 的更新速度、社区活跃度和文档友好程度都稍显落后。

现在随着 Theano 的终止开发,Lasagne 的使用率应该会越来越低。对于初学者而言,目前并不建议选用 Lasagne,但是 Theano+Lasagne 的组合,在深度学习项目上是很常见的选择,如果读者日后参阅 GitHub 上的项目,还有可能会遇到,所以在此介绍一下,供读者参考。

10. DSSTNE

DSSTNE 是 Deep Scalable Sparse Tensor Network Engine(深度可伸缩稀疏张量网络引擎)的缩写,由亚马逊公司发布和维护,它的官网地址为 https://www.amazon.com/amzn/amazon-dsstne

这并不是一个面向主流的深度学习框架,因为 DSSTNE 就是为了推荐系统而设计的。

DSSTNE 是针对稀疏数据的情况完全从头开始构建的,并且完全使用 GPU 运行,即设计了针对单服务器多 GPU 的计算环境。其结果是,在稀疏数据的场景下,DSSTNE 的运算速度比其他深度学习包快得多。虽然这个框架并不支持用户随意在 CPU 和 GPU 之间切换,但是这个功能却在深度学习中经常用到。

虽然 DSSTNE 框架并不具备普适性,但在大热的自然语言理解与视觉识别之外,它在搜索与推荐领域也有着巨大的应用空间,相信这也是亚马逊公司开源 DSSTNE 的初衷。

11. Keras

从严格意义上来讲,Keras 并不算是一个深度学习框架。Keras 是一个高层的 API(应用程序编程接口),它运行在 TensorFlow、CNTK、Theano 或 MXNet 这些学习框架上。

Keras 于 2015 年 3 月首次发布,之后即因其易用性和语法简洁性而广受支持,并得到快速发展。Keras 也是谷歌公司支持的框架之一。

推荐阅读