Tensorflow 出了 2.0,也内置了 Keras API,据说写代码简单了很多。
最近花几周时间尝试,记录一下体会和思考。
总体观点
- 新手入门,建议从 keras 开始。
- 如果能手写公式,且能实现出模型,就不要学 keras 了。有用,但投入产出比不高。
- Tensorflow 内置了 Keras,单独安装 Keras 基本是不需要了。
产品中的算法落地,用 Tensorflow。学术研究用 PyTorch。
Keras 是入门玩具,不宜依赖。
MxNet 的训练速度快 30%,收益不大。
主流框架对比
Tensorflow: 适合算法落地,周边生态成熟。
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 设计的不适合深度定制开发。
- 优点:上手很简单,代码里也不用出现数学公式。
- 缺点:API 和公式脱节,debug 的时候,根本猜不出来 API 背后到底做了多少事情,需要花时间去读源码。跟自己手撸一遍公式相比,不觉得省时间。
- 缺点:定制自己的东西太难了,一层一层 API 读下去,照着抄回来,都忘了自己要干嘛。
框架的速度对比
从 Nvidia 产品的 benchmark 看 3 个框架的速度,MxNet 速度明显最快(30%)。
这点速度差异,对于大多数产品来说,影响不大。
https://developer.nvidia.com/deep-learning-performance-training-inference
参考资料
- TensorFlow 好难,学 Keras 会不会简单一些?https://www.zhihu.com/question/298639259
- 深度学习入门该用PyTorch还是Keras?热门公开课换框架背后的学问 https://www.qbitai.com/2017/09/1000.html
- TensorFlow 2.0 中的 tf.keras 和 Keras 有何区别?为什么以后一定要用 tf.keras? http://bbs.cvmart.net/topics/1287
- 对比复现34个预训练模型,PyTorch和Keras你选谁? https://www.jiqizhixin.com/articles/19031003