原作:Nico Jimenez
安妮 编译自 Nico’s Blog
量子位 出品 | 公众号 QbitAI

本文作者Nico Jimenez。自2015年从斯坦福辍学后,他创造了图像处理API Mathpix,每月为全球数百万用户处理近2000万张图像。此外,他还创造了Mathpix内部机器学习监测和分析方案Losswise。目前,Losswise公开可用。

这篇文章译自Nico的博客,原文标题为《Tensorflow sucks》。在这篇文章中,作者详细论述了“为什么我觉得TensorFlow很逊”这个有趣问题。

本文为作者观点,不代表量子位立场。

 Nico Jimenez

每隔几个月,我都会在谷歌上搜索关键词“TensorFlow太逊了”或者“f* TensorFlow”,希望能找到观点一致的伙伴。这可没那么幸运,虽然TensorFlow已经开源两年了,但始终没有找到让我满意的怒怼。

这就有点不太科学了。从本质上看,赞扬TensorFlow的力量可被分为几波,但都可以被归因为“谷歌深深的嫉妒”现象。这个现象由世界各地的工程师们假设得出:

  • 谷歌员工可能比你更聪明,能力更高

  • TensorFlow用的6更容易在谷歌找到深度学习相关工作!

  • 平凡无奇的创业公司用了TonsorFlow并在博客上赞美它,可能更容易被谷歌收购

  • 如果你没用TensorFlow得到你想要的直观设计,那就是你自己的问题了

现在,我们将这些假设抛掉,客观地评判一下TensorFlow。

结束噩梦?

TensorFlow出现时,我们一度认为它能结束烂设计和深度学习框架的噩梦。但我们实际得到的,是一个和Java差不多的深度学习框架,它比Java少了一些趣味性,并且是纯声明性的开发方式。但这款产品的反馈出奇地好,看起来像谷歌做了一个满足所有人的框架,到底哪里不对?

对研究人员来说,TensorFlow有些难学和难用。灵活性在研究中至关重要,但在TensorFlow中缺乏灵活性是个深层次的问题。

举个例子,想从神经网络的中间层中提取相应值?首先,你需要定义一个函数图像,之后将其作为dictionary执行,当然不要忘记将中间层作为图像的输出,否则你无法检索到它们的值。

想要有条件地执行卷积层?比如当生成一个EOS token时,RNN会停止运行。在你完成这个任务的时候,其他人已经用Pytorch创立第3个AI公司了。

对于像我这样的机器学习实践者来说,TensorFlow也不是一个很好的选择,框架的声明性特性使调试更加困难。能在Android和iOS上运行模型看起来很棒,直到你发现这个框架的二进制文件至少20MB,C++文档几乎不存在,资源少时原本很管用的条件网络也无法执行。

与其他框架的对比

无法否认TensorFlow的开发人员一定是个天才,但目前TensorFlow的原作者中可能最出名的一个:贾扬清,已经离开谷歌加入Facebook了,并且加速开发了Caffe2框架。和TensorFlow不一样,Caffe2允许用户在一行代码中执行一层数据,这一点让人兴奋。

此外,Pytorch在顶尖AI研究者中迅速普及。尽管Torch用户因编写Lua代码执行简单字符串受挫,但他们并没有使用TensorFlow,转而使用了Pytorch。看来,对于顶级人工智能实验室来说,TensorFlow是不够的。

对我来说,最有趣的问题是为什么纯声明式开发方式有明显缺陷,谷歌还是要选择它。他们是否认为将所有计算都封装在一个计算图中,可以简化TPU的执行模型,这样他们就能从云端深度学习应用程序中节省数百万美元的英伟达芯片费用?很难说。

总的来说,TensorFlow并不像一个纯粹的开源项目。如果他们的设计合理,我将不会有任何问题。与谷歌开源的其他项目(如Protobuf、Golang和Kubernetes)相比,TensorFlow的使用人群并不活跃。

虽然声明式开发方式对于UI编程很有益,但对于深度学习来说,做出这个选择的原因有很多。

以标准的交互式Web应用程序React Javascript库为例,在React中,数据流通过应用程序的复杂性有助于隐藏开发人员,因为Javascript的执行顺序通常比更新DOM快得多。React开发人员不想担心传播状态,只要最终用户体验足够好就可以了。

另一方面,在深度学习中,单层网络可以执行数十亿的FLOP!深度学习研究人员非常关心计算机制,并希望进行精细地控制,因为它们不断地推动可能的边缘(例如动态网络),并希望轻松访问中间结果。

具体示例

不如看一个简单的例子,训练一个模型,将其输入乘以3。

首先,让我们看一下TensorFlow的示例:

再来看看在Pytorch上如何执行同样的任务:

尽管Pytorch的例子中只有几行代码,但执行结果却更精确,并且训练循环中的语法更遵循实际的学习进程:

  1. 前向输入

  2. 产生的损失

  3. 计算梯度

  4. 反向传播

而在TensorFlow中,核心操作是sess.run访问。

所以,我们为什么要编写更多行、更难于理解和维护的代码呢?Pytorch的界面比TensorFlow的界面要好得多。

结论

对于快速开发原型来说,TensorFlow太低层了。在但在前沿研究或资源受限的生产环境中使用又看起来层次又太高。

事实上,当你有大约6个开源的高级库建立在级别已经很高的库上,如果想使你的库可用,有些地方就会出问题:

http://tflearn.org/

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim

https://github.com/fchollet/keras

https://github.com/fchollet/keras

https://github.com/tensorflow/skflow

最后,我承认TensorBoard(Tensorflow的监测工具)是个不错的选择。如果你想要一个漂亮的监测解决方案,你的机器学习项目包含高级的模型比较功能,可以到Losswise上看看(https://losswise.com)。这是我自己开发的,开发人员可以从使用的机器学习库中跟踪模型性能,这是TensorBoard不提供的。

加入社群

量子位AI社群9群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot3入群;

此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。

进群请加小助手微信号qbitbot3,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI

վ'ᴗ' ի 追踪AI技术和产品新动态

讲道理,我觉得TensorFlow太逊了相关推荐

  1. 讲道理,只要你是一个爱折腾的程序员,毕业找工作真的不需要再花钱培训!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 标题想吸引你进来参考下我的学习方式,或许能给你带来一些经验.当然不乏一些培训中也有超 ...

  2. 转:世上最愚蠢的行为,就是讲道理

    个人理解:讲的不是理,讲的是进入彼此的情境故事 夏虫不可语于冰,笃于时也:井蛙不可语于海,拘于虚也:曲士不可语于道,束于教也. 世上最愚蠢的行为,就是讲道理 https://www.sohu.com/ ...

  3. 明知道员工不喜欢干一件事,干不好一件事,你还一定要他去干,犯贱就贱在和员工讲道理争输赢,有意思吗?人尽其才,物尽其用(转)...

    下午员工辞职了,我又成了"光杆司令"一枚.谨以此文记. 导火索是因为他坚持他的看法,我不同意.我告诉他,这个问题没有这么简单,我们把它单列出来放在一边,先把其他的事情做了.他不以为 ...

  4. 世间最没有道理的是喜欢?也对,喜欢这种东西讲道理做什么 (小康小白)

    我是小康小白,一个平平无奇的Java小白.热爱有趣的文字,生活和远方. 个人博客:https://blog.csdn.net/weixin_45791445 有问题欢迎QQ联系:1059320343 ...

  5. tensorflow从入门到精通100讲(七)-TensorFlow房价预估使用Keras快速构建模型

    前言 这篇文章承接上一篇tensorflow从入门到精通100讲(二)-IRIS数据集应用实战 https://wenyusuran.blog.csdn.net/article/details/107 ...

  6. 计算机信息哲学认知逻辑,一书一法一工具|思维认知|你对我讲道理,我对你讲逻辑(推荐)...

    为什么要学逻辑?瞬息万变的时代中,思维方式是应对变化的关键.未来竞争从根本上来讲就是思维能力的竞争. 由重点概念引入,到思维转变来初步学习系统思维方法,通过简单的推理来加深概念分析能力,最后几节是提升 ...

  7. 最好的管理:少讲道理,多打胜仗

    电影<长津湖>中,七连乘火车北上入朝,当大家自豪地说着过往战绩时,朱亚文饰演的指导员梅生,面色沉重地告诉新兵伍万里:"伤亡不值得夸耀,挺住就是一切!" 出征前,七连连长 ...

  8. 谈谈离职和跳槽,讲道理得谈

    标题:谈谈离职和跳槽 转载者:gjy 作者:张子阳 来源:http://www.cnblogs.com/JimmyZhang 这篇文章是我在部门会议上一次发言的总结.之所以会有这次会议,是因为我的一名 ...

  9. 命令行下载安装tensorflow太慢的解决方法

    一个很好的解决办法是:使用镜像源地址下载安装. 比如使用清华的镜像源地址快速安装: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ - ...

最新文章

  1. python 获取窗口句柄_Python文件读写最详细的讲解
  2. 如何用c语言读取硬盘串号_如何用C语言实现OOP
  3. Nature重磅:管轶等发现穿山甲是SARS-CoV-2的中间宿主
  4. jQuery基础知识准备
  5. 软件生存周期文档系列 之 6.用户操作手册
  6. 【Siddhi】Siddhi 4.2.40版本之前的一个Bug
  7. 今日恐慌与贪婪指数为38 恐慌程度明显上升
  8. 【JS30-Wes Bos】实时显示的时钟网页 02
  9. 一.正则表达式转换为有限状态自动机:正则表达式转NFA
  10. win10服务器cpu占用过高,完美解决:Win10资源管理器占用CPU过高
  11. 使用GameMaker中用于碰撞检测的脚本小记
  12. 发票扫描识别,互联网+财税OCR解决方案
  13. 银行外汇资金业务学习笔记(3)spot rate (即期汇率)和 forward rate(远期汇率)
  14. 服务器向阿里云转移之容器化1.0.1容器建立
  15. 公司网站建设的几点建议—竹晨网络
  16. 港联证券:为什么会出现股票跌停?股票跌停应该怎么卖出?
  17. 怎样在苹果Mac上显示或隐藏“节假日”日历?
  18. QTabWidget 样式例子
  19. Linux个性化桌面,颜值即正义,超好用的 Linux 桌面个性化工具推荐
  20. 【uni-app教程】uni-app入门教程

热门文章

  1. 华硕win10键盘失灵_Win10 进阶用法汇总
  2. oracle建立表语句 主键,oracle 创建表sql语句,主键,自增长
  3. java 复制对象_Java核心知识 基础七 JAVA 复制
  4. jvm调优工具_JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用
  5. 科大讯飞语音识别芯片_科大讯飞造家电专用语音芯片 市场机会在哪里?
  6. mysql 执行计划不对_MySQL执行计划显示与执行过程不符合
  7. Node有什么特点?
  8. React中PureComponent原理
  9. 深入理解cookie
  10. git常用的10个命令