首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【我不再使用TensorFlow的5大原因】谷歌最受欢迎深度学习框架日渐式微?

【我不再使用TensorFlow的5大原因】谷歌最受欢迎深度学习框架日渐式微?

作者头像
新智元
发布2018-03-21 16:45:29
1.4K0
发布2018-03-21 16:45:29
举报
文章被收录于专栏:新智元新智元
【新智元导读】一篇叫做“TensorFlow Sucks”的文章火了。上线不到两年便成为Github最受欢迎深度学习项目,谷歌开源深度学习框架TensorFlow,有人爱它,有人恨他,本文摘选了一些研究人员和开发者使用TF的感受——TensorFlow竟然这么难用?欢迎留下评论,分享你的使用经验。

最近网上出现了一篇叫做“TensorFlow Sucks”的文章,作者吐槽了谷歌的开源机器学习框架TensorFlow的各种缺点,主要是认为TensorFlow缺乏灵活性,在设计思想和使用上不便于快速原型部署,而且相关的库太过高级无法轻松使用。那篇文章的作者还使用PyTorch和Caffe作对比,认为后者在某些代码和调用方面比TF好很多。

“谷歌想要开发出一款让所有人都能使用的工具,但是它做出的这个产品似乎并不能让所有人都满意。”

这篇文章发布后引发了不小的反向,部分原因当然是TensorFlow庞大的用户群。Quora上也有相关的讨论。下面新智元做了摘译。

TensorFlow是一个高级却给人感觉低级的框架

以下是是Quora用户、来自挪威的数据科学家Håkon Hapnes Strand的回答:

我认为这篇文章很有趣,大部分内容都和我自己使用TensorFlow的经验相吻合。

我完全同意作者关于TensorFlow缺点的主要观点。这是一个高级却给人感觉低级的框架。理想情况下,你想要快速进行原型部署(rapid prototyping),同时在控制细粒度。但通常二者不可得兼。而在TensorFlow里,你是两者都得不到。

所以,你只能在TF上面使用API,比如Keras。但要是用户必须走调用API这条路,本身就说明框架有问题。TensorFlow静态图计算模型的主要卖点在于性能,但各种基准显示,一些其他的框架在保持语法更加简单的同时,实现了与TensorFlow同等的效果。

很明显,大家对谷歌的狂热偏好带来了TensorFlow的流行。在我看来,还有几个不错的深度学习框架。比如说CNTK就不比TensorFlow差。但由于品牌名称不够响亮,就不如TensorFlow流行。大多数研发人员会认为,谷歌做的一切都很创新、令人激动。此外,从营销角度看,“CNTK”名字不够好,而“TensorFlow”就很吸引人。

极度侧重图是最大的优点,也是最大的劣势

以下是来自用户Bohdan Khomtchouk的回答,Khomtchouk是斯坦福的博士后:

我认为TensorFlow极度侧重于图(graph)的这一点是其最大的优势,但也是最大的弱点。

优势在于系统能够适应很多优化,对于生产部署而言也是理想的选择(因为没有语言的运行时间,就是图)。这些事情对谷歌来说很重要,我相信,最终,对于大多数产业级的客户来说也很重要,因此我认为总体而言是很好的。

缺点则主要来自工作时的别扭——你不是在编写程序,而是在定义图。对此,有两种应对方法:

1)使用更高级的声明式API,比如Keras和TF Estimators。实际上大多数人都希望这样使用TensorFlow,所以是一个很好的方法。我相信,TF团队将很快开始将这些框架作为新用户上手TF的工具大力推广。

2)TensorFlow Eager Mode,这将为TensorFlow带来必需的逐行运算语义和动态图。这方面还没有很多细节,但是看GitHub(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/eager)和StackOverflow(什么是TensorFlow Eager代码:https://stackoverflow.com/questions/45967895/what-is-tensorflow-eager-code-for),可以看出些究竟。在我看来,这是为了给研究人员(动态图)和学习者(能够编写更多命令式的程序)提供更多类似PyTorch的环境而开发的。

我认为,这些回应将是非常有效的,而且TensorFlow将继续保持其作为深度学习选择框架/基础设施的地位。

放下TensorFlow,过上美好生活

以下是来自用户、INRIA研究人员Ujjwal的回答:

坦白说,我同意文章中作者的大部分观点。他没有空穴来风,实际上是切中了要害。作为一名研究人员,我完全理解他的经历。

我花了很多时间用TensorFlow做了许多复杂工作(heavy stuff)。不是自夸,真的是很复杂的工作,而这也是对深度学习解决方案的真正考验。

使用CIFAR10,CIFAR100或MNIST这些数据集,任何深度学习库都可以表现出惊人的效果。但你在真实环境中遇到的问题要复杂得多得多得多。

真实场景很重要,在做研究的时候尤其重要。我们都希望很快出结果,有很高的灵活性。如果一个库灵活性不足,那它就不是一个好的库。就是这么简单。

以下是我不喜欢TensorFlowd的原因:

  • 缺乏良好的输入通道:只有TensorFlow的1.4预览版中有一些还算不错的输入通道。Dataset API现支持预抓取,这对于在训练或推理时提高GPU的通量有很大帮助。然而,这也同样容易导致系统进入锁定状态。此外,TF没有文档或案例来展示有效的输入通道。
  • 极度糟糕的社区:你需要用TensorFlow做一些事情。但看文档理解或者解决不了,所以你决定去Github。但当你一点开“New Issue”,首先看到的是一大堆说明,明确地警告你,“只有与开发相关的”问题才能在这里问,其他query都该用StackOverFlow。因为我们都是开源好用户,所以老老实实去了StackOverFlow,发了有深度的帖子。但是,你等啊等,等啊等,不会有回答出现。这样的事情已经发生过好几十次。要是你在Github上发一个issue,就会有人跑过来把你的帖子关掉,还不忘贴心提醒你,这个问题更加适合StackOverFlow。……我在那边问点有深度的问题,不会有任何回应。
  • 粗浅的使用:我不是要说谁,但我在现实生活中真的遇到了很多就是对TensorFlow爱爱爱不停的人。但是,每当我问他们一些深度问题的时候,他们都给我看些CIFAR10 /MNIST的代码。这就是我说的“粗浅的使用”(Shallow Usage)。这是一个危险的趋势。TensorFlow教程中的一切都很棒。但相信我,从大规模应用的角度看,一个都不好。
  • 迷弟泛滥:这个原因最蠢,没有人会承认。但很多人听到TensorFlow就兴奋,就因为名字上跟了个“Google”。这是很难理解,但这是一个事实。而谷歌已经利用了这种愚蠢的优势。
  • 缺少良好的保存和重用方法:如果你使用4个GPU进行模型训练,然后使用S aver.save() 保存模型,.meta文件将保存与每个GPU相对应的图。如果你的朋友需要很快用这个模型进行测试,除非他是一个知道所有内部细节的专家(注意,并没有明确的文档),否则他就没法用。我再次强调,这些东西只有当你去真正使用时才有体会。用一个GPU,或者你只想看到所有使用的GPU都感觉良好,那你可能永远都不会注意到这个重大的缺陷。

我还能说很多,但实在不想打字了。

任何有计算机科学基础知识的人都知道静态图效率高。但是,我都懒得跟那些认为静态图很灵活是很好用的方法的人争论。动态图很重要,因为它们提供了更高水平的灵活性,而灵活性在研究中是非常重要的。

API的改动更是别跟我提。在安装每个新版本之前,我想我以前的代码都来不及。

我已经不用TensorFlow了,将来也不会碰它。我的日子现在好多了。

原文链接:https://www.quora.com/What-do-people-think-of-the-TensorFlow-sucks-article

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档