原文:
www.kdnuggets.com/2017/02/python-deep-learning-frameworks-overview.html
由 Madison May, indico。
我最近发现了我在 Data Science Stack Exchange 上关于 “最佳 Python 神经网络库” 的一个旧回答,这让我意识到在过去 2.5 年里 Python 深度学习生态系统的巨大变化。我在 2014 年 7 月推荐的库 pylearn2
已不再积极开发或维护,但许多深度学习库已崛起取而代之。每个库都有其自身的优缺点。我们在 indico 的生产或开发中使用了大多数列表中的技术,但对于少数未使用的,我将借鉴他人的经验,以帮助提供 2017 年 Python 深度学习生态系统的清晰全面的图景。
特别是,我们将关注:
-
Theano
-
Lasagne
-
Blocks
-
TensorFlow
-
Keras
-
MXNet
-
PyTorch
描述:
Theano 是一个 Python 库,允许你高效地定义、优化和评估涉及多维数组的数学表达式。它支持 GPU 并执行高效的符号微分。
文档:
deeplearning.net/software/theano/
总结:
Theano 是驱动我们列表中许多其他深度学习框架的数值计算工具。它由 Frédéric Bastien 和蒙特利尔大学 MILA 实验室的优秀研究团队开发。它的 API 级别较低,为了编写有效的 Theano 代码,你需要非常熟悉在其他框架中隐藏的算法。如果你拥有丰富的学术机器学习专业知识,寻找对模型进行非常细粒度控制,或希望实现新颖或不寻常的模型,Theano 是首选库。一般来说,Theano 牺牲了易用性以换取灵活性。
优点:
-
灵活
-
如果正确使用则性能良好
缺点:
-
学习曲线较陡
-
更低级别的 API
-
编译复杂的符号图可能较慢
资源:
描述:
一个用于在 Theano 中构建和训练神经网络的轻量级库。
文档:
总结:
由于 Theano 主要旨在成为一个符号数学库,Lasagne 在 Theano 之上提供了更适合深度学习的抽象。它主要由 DeepMind 的研究科学家 Sander Dieleman 编写和维护。Lasagne 允许用户从Layer
层面进行思考,提供像“Conv2DLayer”和“DropoutLayer”等构建块来进行操作,而无需在符号变量之间指定函数关系。Lasagne 在提供丰富的常见组件以帮助层定义、层初始化、模型正则化、模型监控和模型训练的同时,几乎没有牺牲灵活性。
优点:
-
仍然非常灵活
-
比 Theano 更高层次的抽象
-
文档和代码包含各种意大利面梗
缺点:
- 社区较小
资源:
描述:
一个用于构建和训练神经网络的 Theano 框架。
文档:
blocks.readthedocs.io/en/latest/
总结:
类似于 Lasagne,Blocks 试图在 Theano 之上添加一层抽象,以便比编写原始 Theano 代码更清晰、更简单、更标准化地定义深度学习模型。它由蒙特利尔大学的实验室 MILA 编写——这些人中有一些参与了 Theano 及其第一个高层接口 PyLearn2 的构建。它比 Lasagne 灵活一些,但有效使用的学习曲线稍微困难一些。Blocks 对递归神经网络架构有很好的支持,如果你对探索这类模型感兴趣,它值得一看。与 TensorFlow 并列,Blocks 是我们在 indico 生产环境中部署的许多 API 的首选库。
优点:
-
仍然非常灵活
-
比 Theano 更高层次的抽象
-
经过非常充分的测试
缺点:
-
学习曲线较陡
-
社区较小
资源:
描述:
一个使用数据流图进行数值计算的开源软件库。
文档:
www.tensorflow.org/api_docs/python/
摘要:
TensorFlow 是低级符号计算库(如 Theano)和高级网络规范库(如 Blocks 和 Lasagne)之间的混合体。尽管它是 Python 深度学习库中的最新成员,但由于得到 Google Brain 团队的支持,它可能已经拥有了最大的活跃社区。它支持在多个 GPU 上运行机器学习模型,提供高效的数据管道工具,并具有内置的模型检查、可视化和序列化模块。最近,TensorFlow 团队决定将对 Keras 的支持纳入其中,Keras 是我们列表中的下一个深度学习库。社区似乎一致认为,尽管 TensorFlow 存在不足之处,但其社区的庞大和项目的巨大势头意味着学习 TensorFlow 是一个安全的选择。因此,TensorFlow 是我们 indico 目前选择的深度学习库。
优点:
-
由软件巨头 Google 支持
-
社区非常庞大
-
网络训练的低级和高级接口
-
比基于 Theano 的选项编译模型速度更快
-
支持多 GPU 清洁操作
缺点:
-
在许多基准测试中最初较慢于基于 Theano 的选项,尽管 TensorFlow 正在赶上。
-
RNN 支持仍被 Theano 超越
资源:
描述:
Python 的深度学习库。卷积神经网络、递归神经网络等。可以在 Theano 或 TensorFlow 上运行。
文档:
摘要:
Keras 可能是所有库中最高层次、最用户友好的库。它由 Google Brain 团队的另一成员 Francis Chollet 编写和维护。它允许用户选择构建的模型是运行在 Theano 还是 TensorFlow 的符号图上。Keras 的用户界面受到 Torch 启发,因此如果你有 Lua 机器学习的经验,Keras 绝对值得一试。部分得益于优秀的文档和相对易用性,Keras 社区非常庞大且活跃。最近,TensorFlow 团队宣布计划内置 Keras 支持,因此 Keras 很快将成为 TensorFlow 项目的一个子集。
优点:
-
你可以选择 Theano 或 TensorFlow 后端
-
直观的高层接口
-
更易于学习
缺点:
- 比其他选项更不灵活,更具规定性
资源:
描述:
MXNet 是一个旨在兼顾效率和灵活性的深度学习框架。
文档:
mxnet.io/api/python/index.html#python-api-reference
总结:
MXNet 是亚马逊在深度学习中的首选库,可能是所有库中性能最优的。它具有类似 Theano 和 TensorFlow 的数据流图,提供对多 GPU 配置的良好支持,具有类似 Lasagne 和 Blocks 的高级模型构建模块,并且几乎可以在任何你能想到的硬件上运行(包括手机)。Python 支持只是冰山一角——MXNet 还提供了对 R、Julia、C++、Scala、Matlab 和 JavaScript 的接口。如果你在寻找无与伦比的性能,选择 MXNet,但你必须愿意处理一些 MXNet 的怪癖。
优点:
-
超快的基准测试
-
极其灵活
缺点:
-
最小的社区
-
比 Theano 的学习曲线更陡峭
资源:
描述:
Python 中具有强大 GPU 加速的张量和动态神经网络。
文档:
总结:
PyTorch 刚刚发布了一周多,它是我们 Python 深度学习框架列表中的新成员。它是 Lua 的 Torch 库在 Python 上的松散移植,并且值得注意的是,它由 Facebook 人工智能研究团队(FAIR)支持,并且 设计用于处理动态计算图 —— 这是 Theano、TensorFlow 和其衍生品所没有的特性。虽然 PyTorch 在 Python 深度学习生态系统中扮演什么角色尚不明朗,但所有迹象都表明,PyTorch 是我们列表中其他框架的一个非常可敬的替代品。
优点:
-
来自 Facebook 的组织支持
-
对动态图的清晰支持
-
高级和低级 API 的结合
缺点:
-
比其他选项成熟度低得多(用他们自己的话说——“我们处于早期发布的 Beta 阶段。期待一些冒险。”)
-
官方文档之外的参考/资源有限
资源:
简历:Madison May 是一位开发者、设计师和工程师,同时是 indico 数据解决方案 的首席技术官。
原文。转载已获许可。
相关:
-
深度学习、人工直觉与 AGI 的追求
-
深度学习为何与机器学习截然不同
-
深度学习是灵丹妙药吗?
1. Google 网络安全证书 - 快速开启网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持组织的信息技术