我注意到大多数深度学习开发人员都使用 TensorFlow。那么为什么选择 TensorFlow?TensorFlow 相对于 Theano 和 CNTK 的优势是什么?
为什么选择 TensorFlow?
我将概述有关库的一些要点,并指出我读过的一些很好的比较。GitHub 星数只是帮助比较受欢迎程度的另一个参考点。虽然我不容忍简单地追随大众,但这些明星确实可以帮助您了解许多其他人对框架的看法。
张量流
- 有很好的记录
- 扩展到生产,能够使用许多 GPU 或Google TPU
- 允许使用基本构建块灵活创建深度学习架构
- 由谷歌支持
- 有很多追随者——看看它在 GitHub 上收到了多少颗星!
CNTK
- 越来越受欢迎(他们开始比谷歌晚一点)
- 对特定用例有非常有效的实现,例如在文本域中使用 CNN 和 LSTM
- 很好地链接到其他 Micosoft 产品,比如他们基于Azure的工具包
- 在生产中规模化
- 由微软支持
- 在 Github 上有很好的追随者:
西阿诺
虽然仍然是开源的(因此能够由社区进一步开发),但 Theano 背后的团队宣布他们将不再积极开发它。这意味着它现在可能会进一步落后于其他领先的框架,并且来自正在进行的研究的新功能不太可能进入库。
我们可以看到很多人都很欣赏 Theano,但考虑到它基本上是最古老的 DL 框架,star 数说明了一个故事:
附加点
查看一般深度学习框架的一些概述和比较,以更好地了解何时可以使用其中一个。以下是我发现有用的一些:
- 比较顶级深度学习框架
- 深度学习框架之战
- 选择机器学习框架 - 有一个很好的结论
我建议阅读静态和动态计算图之间的区别。Tensorflow 例如构建和编译模型的静态图,然后推送数据。另一方面,PyTorch 允许您动态创建模型,从而在新架构的开发过程中提供更多自由。
一个常见的工作流程是使用 PyTorch 进行开发和研究,然后尝试在 Tensorflow 中编写最终的生产代码以进行部署。
最后一点 - 您应该了解 Keras 库。这是对基础库的封装,例如 Tensorflow、Theano 和 CNTK——未来可能会更多)。它比其他的更高级别且更易于使用,但在幕后它实际上只是使用您所询问的库之一。只需更改配置文件中的标志即可在它们之间进行交换!
为了完整起见,Keras GitHub 明星横幅:
[截至 2018 年 4 月的所有 gitHub 星数]
我意识到随着时间的推移,其中一些观点可能会变得过时和不真实。在这种情况下,请随时发表评论,我可以修改我的帖子。
以下是对 TensorFlow 的一些可能夸大的批评:
Tensorflow 很烂,Nico Jimenez,2017 年 10 月 8 日
这篇文章在Hacker News上进行了讨论。我强调了一些我觉得有趣的引述。首先,关于它的技术含量。
尽管有缺点,但我与本文有着相同的愿景。以下是我的理由:
- Tensorflow 有一个太大的 API 表面积:解析命令行参数处理、单元测试运行器、日志记录、帮助格式化字符串......其中大多数不如 python 中可用的对应物好。
- C++ 和 Go 版本与 Python 版本完全不同。有限的代码重用,不同的 API,没有以同样的注意力维护或记录。
- 源代码中的技术债务是巨大的。例如,安全分区 (_safe_div) 的源代码中有 3 个冗余实现,接口略有不同(有时使用默认参数,有时没有)。这是技术债。
在各个方面,它都让我想起了 Angular.io 项目。一个失败的承诺是真正的多语言,没有使用 python 的表达能力,一个超大的 API 试图做我们没有要求它做的事情,并且缺乏一个通用的声音架构。(由蝙蝠侠)
关于 TensorFlow 背后的哲学和政治的一些猜测:
我认为作者提出了一个关于谷歌嫉妒的好观点。TensorFlow 不是目前最直观或最灵活的库,如果您不进行大规模分布式训练,它就会过度设计。大家议论纷纷的主要原因是谷歌从一开始就大力推销它,每个人都自动假设谷歌== Virtuoso Software Design,因为他们无法通过面试。实际上,它只是现代企业软件,它有五种不同的方式来实施他们推动社区的批处理规范,因此他们不必培训新员工如何使用它。(由 zo7 提供)
或者它是由一家进行大规模分布式培训的公司构建的,他们开源它不是为了满足所有需求,而是为了帮助其他试图做同样事情的人。公司没有义务确保他们的开源非常适合其他用例。(通过DSL)
这有点像我的观点,它不是万能的深度学习库,因为它们是为自己的用例而制作的,但它的高人气(就像其他流行库的明星数量的 10 倍)并不是真正的。
我也非常怀疑谷歌开源它的主要原因是为了慈善。(由 zo7 提供)
选择 Tensorflow(恕我直言)的原因:
- 庞大的用户社区:对于您遇到的每个问题,都有 100 多个解决方案和示例代码。
- Keras:它使得在 Tensorflow 之上创建一些高级模型变得容易。
- 支持:每个人都知道 Tesnorflow 得到了 Google 的支持,并且他们会定期更新。除了 Theano 之外,其他一些框架也是如此。Mila(创建 Theano 的实验室)停止了这个项目。
- Tensorboard:它使您可以轻松地可视化模型的指标,并且可以直接使用。
鉴于这一切,我也非常喜欢 PyTorch。它使用起来简单自然,得到了一些大牌的支持,最重要的是,如果你使用过 Matlab 或 numpy,你会觉得使用它比 Tensorflow 更舒服。
Tensorflow 有更多的灵活性来做你想做的事情。如果你只是想训练一个标准的 CNN,那么也许 Theano 可以胜任。如果你想做更多有趣的事情,比如创建新架构、使用新的学习率计划或测试时间增加,Theano 限制太多。我还听说 Tensorflow 的性能更高一些,因此最好在生产环境中使用。