8c89051eae608230526fc3272f01c114.png

Tensorflow 出了 2.0,也内置了 Keras API,据说写代码简单了很多。

最近花几周时间尝试,记录一下体会和思考。

总体观点

  1. 新手入门,建议从 keras 开始。
  2. 如果能手写公式,且能实现出模型,就不要学 keras 了。有用,但投入产出比不高。
  3. Tensorflow 内置了 Keras,单独安装 Keras 基本是不需要了。

产品中的算法落地,用 Tensorflow。学术研究用 PyTorch。

Keras 是入门玩具,不宜依赖。

MxNet 的训练速度快 30%,收益不大。

主流框架对比

Tensorflow: 适合算法落地,周边生态成熟。

1f833eb394033ecf05e6dffae044a837.png

PyTorch:学术界普遍使用 。开发新模型简单,尤其是 NLP 领域。

引自:https://www.qbitai.com/2017/09/1000.html

我们为什么开始尝试PyTorch?
当我们开发第二门课《面向程序员的前沿深度学习》的时候,原来选的TensorFlow和Keras框架开始让我们处处碰壁。
比如说,现在自然语言处理中最重要的技术,大概是attention模型。可是我们发现,当时在Keras上没有attention模型的有效实现,而TensorFlow实现没有文档、一直在改,还复杂得毫无必要。
结果是我们决定自己在Keras里做一个attention模型实现,花了好长时间,debug也非常难。
接下来,我们又开始研究dynamic teacher forcing的实现。要实现一个准确的神经网络翻译模型,dynamic teacher forcing是其中的关键,但我们无论是在Keras里还是TensorFlow里,都找不到这个模型的实现。
于是,我们又开始尝试自己搞,这次比attention模型还失败,根本就没做出来能用的。
这时候,PyTorch的第一个预发布版出现了。这个新框架不是基于静态计算图,而是一个动态的框架,这为我们带来了新的希望。它说,动态框架让我们在开发自己的神经网络逻辑时,只需要写普通的Python代码,像正常用Python一样去debug。
我们第一次用PyTorch,就用它从头开始在实现了Attention模型和dynamic teacher forcing,只用了几个小时。

MxNet:代码风格统一,SOTA 的 pretrain model 多。训练速度快。

无信息补充。

Keras:上手简单,API 设计的不适合深度定制开发。

  1. 优点:上手很简单,代码里也不用出现数学公式。
  2. 缺点:API 和公式脱节,debug 的时候,根本猜不出来 API 背后到底做了多少事情,需要花时间去读源码。跟自己手撸一遍公式相比,不觉得省时间。
  3. 缺点:定制自己的东西太难了,一层一层 API 读下去,照着抄回来,都忘了自己要干嘛。

框架的速度对比

从 Nvidia 产品的 benchmark 看 3 个框架的速度,MxNet 速度明显最快(30%)。

这点速度差异,对于大多数产品来说,影响不大。

https://developer.nvidia.com/deep-learning-performance-training-inference

dbd689e7e3903640a62b5477df319e3b.png

参考资料

  1. TensorFlow 好难,学 Keras 会不会简单一些?https://www.zhihu.com/question/298639259
  2. 深度学习入门该用PyTorch还是Keras?热门公开课换框架背后的学问 https://www.qbitai.com/2017/09/1000.html
  3. TensorFlow 2.0 中的 tf.keras 和 Keras 有何区别?为什么以后一定要用 tf.keras? http://bbs.cvmart.net/topics/1287
  4. 对比复现34个预训练模型,PyTorch和Keras你选谁? https://www.jiqizhixin.com/articles/19031003

更多推荐