文档乱、调试难…TensorFlow有那么多缺点,但我们为何依然待它如初恋?

AI科技评论按:作为谷歌AlphaGo背后的强大推动力,于2015年底开源的TensorFlow一经推出便受到极大关注。目前在所有机器学习框架中,如果它宣称使用普及率第二,没人敢说自己是第一。

虽说有谷歌的背书,社区好,资源多,但同学们在使用TensorFlow的过程中,常常会一不小心跳进坑里,严重影响体验。

近日一位同学就在知乎上提了一个问题【TensorFlow有哪些令人难以接受的地方?】,表达了TensorFlow在使用过程中的不便,顺便问了大家有没有什么更优雅的方法绕过那些坑。短短一个月的时间,该问题的浏览量已经达到10万+,关注者也达上千人。

作为问题的提出者,这位同学也试着抛砖引玉作了回答,他表示提出这个问题的初衷是希望引发大家对TF少一些盲目的推崇,多些理性的思考和进一步的讨论。而在全部42个回答中,AI科技评论也总结了一些有意思的现象。

TensorFlow的“吐槽大会”

结合知乎上网友的回答,以及业内相关人士对TensorFlow的评价,AI科技评论整理了TensorFlow目前被“吐槽”频率比较高的一些问题。

  • 文档和接口混乱 因为它的API发展太快,经常更新,所以有一些常用的函数方法会不断挪位置,例如rnn就从之前的nn接口移到contrib接口,写代码时需要常常翻阅文档。底层接口写起来繁琐,高层接口不灵活,且封装混乱。
  • 默认占用所有GPU的所有内存 在实验过程中,并不是所有人都有多块GPU可用。tf在GPU不可用时会自动改在CPU上跑,这样一方面会导致速度变慢,另一方面,在共用显卡的情况下,你根本就不知道是在CPU上跑。虽说tf会打印设备信息,但是tf启动的时候输出的信息太杂了,没法每次都仔细看一遍。
  • 使用繁琐 明明有其他更通用的模块能用,可事无巨细都要去使用tf的模块。例如虽然有默认的python库argparse可以用,但在很多tf示例代码中使用tf.app.flags。
  • 做流程控制非常难以理解 语句中存在条件分支,例如当a>0时执行一步,a<0时执行另一步,如果有多层的这种条件嵌套会很难操作。
  • 调试困难 TensorFlow作为静态图框架,api经常变,打印中间结果必须要借助Session运行才能生效,或者学习额外的tfdbg工具。而如果是用PyTorch这样的动态框架的话,就不需要多学一个额外的工具,只需要用正常的Python调试工具如ipdb就可以了。

综合看来,在使用TF的过程中,确实存在很多不够人性化的地方。不过,每个工具都不是完美的,虽说TF缺陷很多,但是对框架使用情况的统计数据最能说明问题,正所谓“TF虐我千万遍,我待TF如初恋”嘛。

TF普及率遥遥领先

下表为各个开源框架在GitHub上的数据统计(数据统计于 2017 年 9月 6 日),可以看到 TensorFlow 在 star 数量、fork 数量、contributor 数量这三个数据上都完胜其他对手。

此外,特斯拉AI负责人Andrej Karpathy2017年初通过分析过去五年arxiv上的论文数据,对比了各种深度学习框架的使用情况,看图说话:

下图是从2012年1月到2017年3月各框架的使用随时间的发展趋势。

下图对比了2017年3月在arxiv上提交的论文中提到深度学习框架的情况。

结合上面两张图,可以看到,自15年底谷歌开源TensorFlow以来,它的用户数增长稳定,而且一直处于高速的增长中,到17年3月,已经处于不可撼动的地位。(pytorch于2017年1月才开源,此处不做对比)

AI科技评论也总结了TensorFlow的几点优势。

  • 背靠谷歌这座大山,目前TensorFlow的文档最全,资源最多,很多模型都有tf的源码实现。而且用户基数庞大,一旦出问题很容易找到解决方案。
  • TensorFlow有功能强大的可视化组件TensorBoard,能可视化网络结构和训练过程,对于观察复杂的网络结构和监控长时间、大规模的训练很有帮助。
  • 虽然TensorFlow是静态图操作,会给调试带来困难,但会大大方便部署。除了caffe,目前还没有其他架构能支持静态图操作,但是caffe编程要比TF复杂。

而有意思的是,caffe作者贾扬清也在知乎上为TensorFlow正名。

他提到,TF是目前唯一一个在核心设计层面上支持dynamic control flow的框架,也是极少几个经历大规模多应用部署考验的框架之一。TensorFlow能直面实际应用中的限制条件,部署到真正核心的产品里面,它支持大规模推荐系统和移动端产品的部署,而这点对于很多框架来说没法实现。

“TF的确难,但是它给你提供了真正可以产品化的可能性。很多问题只看见一棵树的时候简单,看见森林的时候,解决方法就不一样了。”

细数完优点和缺点,问题来了。对于哪些实在忍受不了TensorFlow缺点的人,在考虑是否应该换个框架了。而对于那些还没入坑的同学,到底该用哪种框架?

当前主流框架大对比

主流框架的对比一直是个长期被讨论的话题,相关的帖子和文章也层出不穷。而在今年三月的斯坦福大学cs231n中,李飞飞、Justin Johnson和 Serena Yeung 也对当前几种主流框架进行了对比,并给出了建议。

  • TensorFlow虽然不完美,但是利于部署,有稳定的社群。此外它还拥有很多库,比如Keras和Sonnet等。
  • PyTorch很适合用于研究,但是它很新,因此你可能有很多坑要填。
  • 除了TensorFlow,caffe、caffe2也可以用于产品部署。
  • 手机端可以考虑TensorFlow或caffe2。

此外,北大的吴秉哲同学在知乎上也给出了很好的解答,他之前用Pytorch,Tensorflow,Mxnet这三个模型都做过项目,认为应该根据自己的需求选择模型。

  • 在需要快速验证一下自己某些想法的时候,我一般会用Pytorch快速实现,而且Pytorch的底层计算的代码是C写的,并且和Torch共用一套底层计算代码,想要阅读原码并做定制化修改比较容易上手。
  • 在做一些数据量比较大的long term的训练的时候,我会用tensorflow,比如它提供的tensorboard的训练监督,还有自带的profiling和debug功能比较方便,还有个原因就是它可以很方便的把模型deploy到手机上,现在caffe2出来了,或许可以是一个比较好的替代。
  • 另外选择框架的时候还得参考一下你所做的项目,比如做person re id大多数的工作都是基于caffe修改的,这个时候需要考虑迁移这些工作到其他框架下时不时会遇到坑。
  • 如果做物体定位,Mxnet已经提供了一些操作的高效实现。

他还强调,“现在框架迭代得也越来越快,mxnet在近期推出gluon的接口,API仿照Pytorch设计。不久之后Tensorflow也会有相应的接口推出。”

总结

很多同学在实验过程中,总是对框架过多考虑。这个框架的速度怎么样?好用程度程度怎么样?为什么文档这么乱?为什么用起来这么不顺手?随之而来就是一系列的吐槽。而他们往往忽略了最关键的东西,框架只是个手段,重要的是你想解决的是什么问题,以及你解决问题的思路。

此处借用贾扬清一句话,“框架就是个框架,最终要能出活。”

AI科技评论

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-09-10

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DevOps时代的专栏

我们如何转型微服务?

微服务在这个时代是一个常常被提及的话题。 我在 SoundCloud时, 曾经负责把一个巨石架构的 Ruby on Rails 应用迁移到微服务。这个故事的技术...

1928
来自专栏java思维导图

少走弯路,给Java 1~5 年程序员的建议

今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。...

863
来自专栏大宽宽的碎碎念

如何看待编写业务代码

1676
来自专栏平凡文摘

少走弯路,给Java 1~5 年程序员的建议

1434
来自专栏Java架构师进阶

少走弯路,给Java 1~5 年程序员的建议

今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。

582
来自专栏微信公众号:Java团长

一位资深程序员大牛给予Java初学者的学习路线建议

Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱...

784
来自专栏平凡文摘

一位资深程序员大牛给予Java初学者的学习路线建议

1244
来自专栏智能算法

98.8秒夺冠,解析腾讯云数智背后的架构与算法优化

背景 11月10日,具有计算奥运会之称的 Sort Benchmark 全球排序竞赛公布了2016年最终成绩,腾讯云大数据联合团队用时不到99秒(98.8秒)就...

3384
来自专栏Java架构师进阶

少走弯路,给Java 1~5 年程序员的建议

今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。

622
来自专栏思影科技

社会交互时的脑网络变化可反映社会网络结构

来自密歇根州立大学的Ralf Schmälzle等人在PNAS上发文,主要介绍了社交交互过程中的脑网络的大脑连接的变化,并发现基于脑网络可以一定程度地揭示社交网...

3186

扫描关注云+社区