从PyTorch到Mxnet ,对比7大Python深度学习框架

选自kdnuggets

作者:Madison May

机器之心编译

参与:王宇欣、李亚洲

选择什么深度学习框架一直是开发者非常关心的一个话题,而且深度学习框架之间的「战争」也越来越激烈。过去一段时间,机器之心发过多篇机器学习框架的对比文章,但随着 Python 逐渐成为机器学习社区最受欢迎的语言,支持 Python 的深度学习框架的性能也值得关注。Indico Data Solutions 的 CTO Madison May 根据他们公司在产品和开发过程中的经验对 7 大 Python 深度学习框架进行了对比,希望这篇文章能对机器之心的读者有所帮助。

最近我无意间在「Best Python library for neural networks」话题下发现了一个我以前的数据科学栈交换(Data Science Stack Exchange)的答案,并且 Python 深度学习生态系统在过去两年半中的演变打击到了我。我在 2014 年 7 月推荐的库,pylearn2,已经不再被积极地开发或者维护,大量的深度学习库开始接替它的位置。这些库每一个都各有千秋。我们已经在 indico 的产品或者开发中使用了以下列表中的大部分的技术,但是对于剩下一些我们没有使用的,我将会借鉴他人的经验来帮助给出 2017 年 Python 深度学习生态系统的清晰的、详尽的理解。

确切地说,我们将会关注:

  • Theano
  • Lasagne
  • Blocks
  • TensorFlow
  • Keras
  • MXNet
  • PyTorch

下面是对这 7 大 Python 深度学习框架的描述以及优缺点的介绍,而且也为每个框架的使用推荐了一些资源,但因微信不支持外网链接,读者们请点击阅读原网址查看资源。

Theano

链接:https://github.com/Theano/Theano

描述:Theano 是一个 Python 库,允许你定义、优化并且有效地评估涉及到多维数组的数学表达式。它与 GPUs 一起工作并且在符号微分方面表现优秀。

文档:http://deeplearning.net/software/theano/

概述:Theano 是数值计算的主力,它支持了许多我们列表当中的其他的深度学习框架。Theano 由 Frédéric Bastien 创建,这是蒙特利尔大学机器学习研究所(MILA)背后的一个非常优秀的研究团队。它的 API 水平较低,并且为了写出效率高的 Theano,你需要对隐藏在其他框架幕后的算法相当的熟悉。如果你有着丰富的学术机器学习知识,正在寻找你的模型的精细的控制方法,或者想要实现一个新奇的或者不同寻常的模型,Theano 是你的首选库。总而言之,为了灵活性,Theano 牺牲了易用性。

优点:

  • 灵活
  • 正确使用时的高性能

缺点:

  • 较高的学习难度
  • 低水平的 API
  • 编译复杂的符号图可能很慢

Lasagne

链接:https://github.com/Lasagne/Lasagne

描述:在 Theano 上建立和训练神经网络的轻量级库

文档:http://lasagne.readthedocs.org/

概述:因为 Theano 致力于成为符号数学中最先且最好的库,Lasagne 提供了在 Theano 顶部的抽象,这使得它更适合于深度学习。它主要由当前 DeepMind 研究科学家 Sander Dieleman 编写并维护。Lasagne 并非是根据符号变量之间的函数关系来指定网络模型,而是允许用户在层级思考,为用户提供了例如「Conv2DLayer」和「DropoutLayer」的构建块。Lasagne 在牺牲了很少的灵活性的同时,提供了丰富的公共组件来帮助图层定义、图层初始化、模型正则化、模型监控和模型训练。

优点:

  • 仍旧非常灵活
  • 比 Theano 更高级的抽象
  • 文档和代码中包含了各种 Pasta Puns

缺点:

  • 社区小

Blocks

链接:https://github.com/mila-udem/blocks

描述:用于构建和训练神经网络的 Theano 框架

文档:http://blocks.readthedocs.io/en/latest/

概述:与 Lasagne 类似,Blocks 是在 Theano 顶部添加一个抽象层使深度学习模型比编写原始的 Theano 更清晰、更简单、定义更加标准化。它是由蒙特利尔大学机器学习研究所(MILA)编写,其中一些人为搭建 Theano 和第一个神经网络定义的高级接口(已经淘汰的 PyLearn2)贡献了自己的一份力量。比起 Lasagne,Blocks 灵活一点,代价是入门台阶较高,想要高效的使用它有不小的难度。除此之外,Blocks 对递归神经网络架构(recurrent neural network architectures)有很好的支持,所以如果你有兴趣探索这种类型的模型,它值得一看。除了 TensorFlow,对于许多我们已经部署在 indico 产品中的 API,Blocks 是其首选库。

优点:

  • 仍旧非常灵活
  • 比 Theano 更高级的抽象
  • 易于测试

缺点:

  • 较高的学习难度
  • 更小的社区

TensorFlow

链接:https://github.com/tensorflow/tensorflow

描述:用于数值计算的使用数据流图的开源软件库

文档:https://www.tensorflow.org/api_docs/python/

概述:TensorFlow 是较低级别的符号库(比如 Theano)和较高级别的网络规范库(比如 Blocks 和 Lasagne)的混合。即使它是 Python 深度学习库集合的最新成员,在 Google Brain 团队支持下,它可能已经是最大的活跃社区了。它支持在多 GPUs 上运行深度学习模型,为高效的数据流水线提供使用程序,并具有用于模型的检查,可视化和序列化的内置模块。最近,TensorFlow 团队决定支持 Keras(我们列表中下一个深度学习库)。虽然 TensorFlow 有着自己的缺点,但是社区似乎同意这一决定,社区的庞大规模和项目背后巨大的动力意味着学习 TensorFlow 是一次安全的赌注。因此,TensorFlow 是我们今天在 indico 选择的深度学习库。

优点:

  • 由软件巨头 Google 支持
  • 非常大的社区
  • 低级和高级接口网络训练
  • 比基于 Theano 配置更快的模型编译
  • 完全地多 GPU 支持

缺点:

  • 虽然 Tensorflow 正在追赶,但是最初在许多基准上比基于 Theano 的慢。
  • RNN 支持仍不如 Theano

Keras

链接:https://github.com/fchollet/keras

描述:Python 的深度学习库。支持 Convnets、递归神经网络等。在 Theano 或者 TensorFlow 上运行。

文档:https://keras.io/

概述:Keras 也许是水平最高,对用户最友好的库了。由 Francis Chollet(Google Brain 团队中的另一个成员)编写和维护。它允许用户选择其所构建的模型是在 Theano 上或是在 TensorFlow 上的符号图上执行。Keras 的用户界面受启发于 Torch,所以如果你以前有过使用 Lua 语言的机器学习经验,Keras 绝对值得一看。由于部分非常优秀的文档和其相对易用性,Keras 的社区非常大并且非常活跃。最近,TensorFlow 团队宣布计划与 Keras 一起支持内置,所以很快 Keras 将是 TensorFlow 项目的一个分组。

优点:

  • 可供选择的 Theano 或者 TensorFlow 后端
  • 直观、高级别的端口
  • 更易学习

缺点:

  • 不太灵活,比其他选择更规范

MXNet

链接:https://github.com/dmlc/mxnet

描述:MXNet 是一个旨在提高效率和灵活性的深度学习框架。

文档:http://mxnet.io/api/python/index.html#python-api-reference

概述:MXNet 是亚马逊(Amazon)选择的深度学习库,并且也许是最优秀的库。它拥有类似于 Theano 和 TensorFlow 的数据流图,为多 GPU 配置提供了良好的配置,有着类似于 Lasagne 和 Blocks 更高级别的模型构建块,并且可以在你可以想象的任何硬件上运行(包括手机)。对 Python 的支持只是其冰山一角—MXNet 同样提供了对 R、Julia、C++、Scala、Matlab,和 Javascript 的接口。如果你正在寻找最佳的性能,选择 MXNet 吧,但是你必须愿意处理与之相对的一些 MXNet 的怪癖。

优点:

  • 速度的标杆
  • 非常灵活

缺点:

  • 最小的社区
  • 比 Theano 更困难的学习难度

PyTorch

链接:https://github.com/pytorch/pytorch

描述:Python 中的张量(Tensors)和动态神经网络,有着强大的 GPU 加速。

文档:http://pytorch.org/docs/

概述:刚刚放出一段时间,PyTorch 就已经是我们 Python 深度学习框架列表中的一个新的成员了。它是从 Lua 的 Torch 库到 Python 的松散端口,由于它由 Facebook 的 人工智能研究团队(Artificial Intelligence Research team (FAIR))支持且因为它用于处理动态计算图(Theano,TensorFlow 或者其他衍生品没有的特性,编译者注:现在 TensorFlow 好像支持动态计算图),它变得非常的有名。PyTorch 在 Python 深度学习生态系统将扮演怎样的角色还不得而知,但所有的迹象都表明,PyTorch 是我们列表中其他框架的一个非常棒的选择。

优点:

  • 来自 Facebook 组织的支持
  • 完全地对动态图的支持
  • 高级和低级 API 的混合

缺点:

  • 比其他选择,PyTorch 还不太成熟(用他们自己的话说—「我们正处于早期测试版本。期待一些冒险」)
  • 除了官方文档以外,只有有限的参考文献/资源

原文链接:http://www.kdnuggets.com/2017/02/python-deep-learning-frameworks-overview.html

©本文为机器之心编译,转载请联系本公众号获得授权。

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:editor@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2017-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

学界 | 谷歌地图重大升级,用深度学习实时更新街景

AI科技评论按:每天,谷歌地图都为成千上百万的人们提供方位指示,实时路况信息以及商业信息。为了提供最佳的用户体验,地图信息需要不断的根据现实世界的变化做出调整。...

31570
来自专栏机器之心

人工智能与自然语言处理概述:AI三大阶段、NLP关键应用领域

选自xenonstack 机器之心编译 参与:黄小天、李亚洲 近日,Xenonstack 上推出了一篇名为《Overview of Artificial In...

49980
来自专栏CDA数据分析师

工具 | 用Python做自然语言处理必知的八个工具

Python以其清晰简洁的语法、易用和可扩展性以及丰富庞大的库深受广大开发者喜爱。其内置的非常强大的机器学习代码库和数学库,使Python理所当然成为自然语言处...

22460
来自专栏xingoo, 一个梦想做发明家的程序员

白话推荐系统——从原理到实践,还有福利赠送!

之前流水账似的介绍过一篇机器学习入门的文章,大致介绍了如何学习以及机器学习的入门方法并提供了一些博主自己整理的比较有用的资源。这篇就尽量以白话解释并介绍机器学...

22660
来自专栏AI科技评论

不一样的论文解读:2018 KDD best paper「Embeddings at Airbnb」

Airbnb 的 Real-time Personalization using Embeddings for Search Ranking at Airbnb...

23720
来自专栏人工智能头条

借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘

18530
来自专栏PPV课数据科学社区

机器学习及大数据相关面试的职责和面试问题

? 目录 · 机器学习、大数据相关岗位的职责 · 面试问题 · 答题思路 · 准备建议 · 总结 各个企业对这类岗位的命名可能有所不同,比如推荐算法/数据挖掘...

35670
来自专栏新智元

Jeff Dean、李飞飞等发起SysML大会,Jeff Dean主题演讲:系统与机器学习融合(45PPT)

新智元报道 来源:SysML 2018 编辑:闻菲、艾霄葆、常佩琦、刘小芹 【新智元导读】Jeff Dean、Michael I.Jordan、李飞飞、...

45480
来自专栏FD的专栏

人工智能与自然语言处理概述:AI三大阶段、NLP关键应用领域

AI 指代「人工智能」,是让机器能够像人类一样完成智能任务的技术。AI 使用智能完成自动化任务。

13230
来自专栏PPV课数据科学社区

干货分享:数据可视分析中的知识产生模型

可视分析技术已经发展了近十年。在这些年间,人们研究了大量的可视分析方法和案例,发表了不少研究论文。然而,对于一些基本问题,人们依然没有明确的答案。例如,一个基本...

41560

扫码关注云+社区

领取腾讯云代金券