最近网上出现了一篇叫做“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的原因:
我还能说很多,但实在不想打字了。
任何有计算机科学基础知识的人都知道静态图效率高。但是,我都懒得跟那些认为静态图很灵活是很好用的方法的人争论。动态图很重要,因为它们提供了更高水平的灵活性,而灵活性在研究中是非常重要的。
API的改动更是别跟我提。在安装每个新版本之前,我想我以前的代码都来不及。
我已经不用TensorFlow了,将来也不会碰它。我的日子现在好多了。
原文链接:https://www.quora.com/What-do-people-think-of-the-TensorFlow-sucks-article