当前位置: 首页 > 科技观察

推出两个月后,TensorFlow2.0一直被抱怨太难用,网友:看看PyTorch

时间:2023-03-15 22:41:22 科技观察

TensorFlow被吐槽难用。这不是一两天。TensorFlow2.0的发布,似乎将这场“民怨”推向了高潮。昨天,一位reddit网友表示,他正在尝试从PyTorch转向TF2.0(虽然他没有说为什么想不开),但他抱怨“太难了”。这篇吐槽TensorFlow2.0的帖子让网友疯狂点赞。切换之后,TF2.0给他最大的感受是:库本身没有问题,真正的问题在于缺乏官方的指导方针、详细的文档以及官方开发团队的解答。首先ta觉得TensorFlow的信息量不够大:很多用户很常用的pipeline都得自己搞。而且,似乎有很多方法可以做任何事。麻烦的是这些方法有细微的差别,但是官方文档并没有告诉你有什么区别。只能苦苦的翻翻他们的GitHubissues,能找到都是运气。其次,ta发现medium上有很多非正式的TF2.0相关的博客,但是这些博客含有大量的错误信息,有的是广告。最后ta发现网上有很多关于TF的问题,但是没人回答,有的甚至是一年前就提出来的。这些问题质量很高,官方文档中没有提到。相比之下,PyTorch有一个论坛,你可以在这里提问并从PyTorch开发者那里得到答案,这比TensorFlow好多了。发帖人还对比了TensorFlow和PyTorch的积压问题,发现PyTorch只有2101个未回答的问题,而TensorFlow却达到了24066个。差距之大令人震惊。所以,笔者总体的感觉是TensorFlow架构本身问题不大,但是它给的用户体验实在是太差了。最后,这位网友忍不住发问自己的灵魂:“如果你不提供足够的信息,让用户知道最好的使用方式,再做的再好又有什么用?”所谓一石激起千层浪。这位网友的吐槽引起了一大批TFboys(妹)的共鸣,此贴也成为了TF2.0的大型吐槽站。TF2.0遭遇疯狂吐槽除了认同发帖人提出的几个问题外,跟帖的网友们还指出了TensorFlow2.0本身存在的一些问题,比如与Keras的整合。关注该帖的网友的主要观点可以归纳为:官方文件不足/官方文件不好找;许多错误没有及时修复或更新;与Keras的集成不好,导致用户混淆。2.0版本的文档和教程有很多不足之处。有网友写道:“在TF的黄金时代,有很多简单易用的教程,官网的教程质量也很高。但是自从引入了Keras,整个指南文档就变成了AmixKeras和经典TF。”这一评论得到了很多人的响应。有人说TF1.x版本虽然学习成本高,但是(教程)很连贯,而且有tensor2tensor等代码库,老版本用起来没那么难。官方教程的缺乏让社区只能靠自己,许多人不得不到别处寻找教程和指南。但是非官方的教程不一定靠谱。比如下面这位网友写的:我的故事:1、我有一个想法,想在训练过程中逐渐改变损失函数的“形状”;2.我搜索“tensorflowchangesthelossfunctionduringtraining”;3.搜索结果排在第一位的是一篇Medium文章,我们来看看;4.这篇Medium文章介绍了均方误差(MSE)损失函数以及如何使用它在TensorFlow中训练深度神经网络;5.我不得不用头敲击键盘。这不仅仅是教程文本错误的问题。正如发帖者所说,非官方教程也会有很多错误,增加用户解决问题的成本。久而久之,大家自然不愿意用TF2.0了。此外,粉丝的反馈也证实了发帖人的第三个问题:太多的问题和反馈没有得到及时处理。反馈延迟,bug积压可能是因为TF社区本身比较火热,框架的问题和反馈会比较多,所以TF官方对问题和bug修复的回复似乎比PyTorch慢。正如发帖者所说,TensorFlow的未解答问题是PyTorch的10倍以上。更重要的是,PyTorch还有专门的团队负责平台上的答疑解惑。对于一个开源软件来说,提高其性能、易用性、安全性以及减少bug的最好方法就是不断收集用户反馈,给予反馈,并根据反馈修复bug和问题。但是,如果TF2.0不及时处理这些问题,软件本身就无法持续改进。正是因为TF官方能够在用户遇到问题的时候及时跟进和改进,用户才会持续留存。一位网友评论说,他在使用TF2.0的过程中遇到了很多问题,幸好官方开发经理跟进并解决了,所以他愿意继续使用TF2.0。除了这两个问题,很多人还是回归吐槽Keras和TF的组合。Keras使它更难使用。有网友认为,TF2.0还有一个不能用的地方,就是Keras和TF2.0的“联姻”。上图的人说eager模式确实是TF版本更新迭代的正确方向(毕竟去掉了万恶之源session,支持动态图),但是Keras的引入使得API比较混乱。现在人们有多种构建模型的方式:tf.keras、tf.function等。这些是TF2.0目前遇到的问题,但距离第一个alpha版本发布已经半年多了,为什么还有那么多问题困扰着开发界?机器之心通过整理以往发布的资料认为,TF2.0的设计思路可能存在一些问题,使得原本朝着易用性发展的框架变得难以使用。思路混乱,框架难用。TensorFlow2.0本身的定位是减少复杂冗余的API,降低用户使用门槛,促进其在研究领域的发展和深度学习的普及。这个想法是对的,但是在实际设计阶段,实现上述目标所采用的方案并不正确,最终导致TF2.0仍然难以使用。引入Keras可能是一个错误。Keras是一个代码库,封装了TF等深度学习框架,具有很好的易用性。TensorFlow引入KerasAPI是为了解决被诟病的上手难问题。但从TensorFlow的定位和功能来看,与Keras的结合目前还不够成功。如下图所示,TensorFlow本身在其架构中有一个非常细粒度的低级API。这样的框架非常适合在各个方面进行定制。但Keras恰恰相反。用户不知道如何构建底层架构,只需要关注整体的设计流程。这两个框架可以说是两个极端,在TF2.0中采用了一种折衷的兼容形式:TF2.0本身按照PyTorch的方法构建了一个灵活的模型,不需要这种设计的用户使用tf.kerashigh级API。如此碎片化的API让用户无所适从,也让他们更难找到教程,因为除了搜索TF2.0之外,他们还需要弄清楚这个教程是关于TF2.0本身的,还是关于tf.0的。喀拉斯。来源:https://www.pyimagesearch.com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/这个有点类似于TF1.x时代各种API混用——同一个功能可以由不同的API实现。但是,当不同功能的API组合在一起时,某些API可能无法兼容。例如,我使用tf.keras构建了一个模型=tf.keras.Sequential的网络,它的训练循环是什么样的?我应该使用model.fit()吗?或者将tf.GradientTape()用作Tape?如果我想在损失函数中自定义某个标签的损失,应该在哪里修改呢?冗余的API增加了额外的学习成本,这自然会让用户产生很多新的疑问。而如果不及时解决这些问题和错误,用户就会失去使用这个框架的兴趣。更何况在分布式训练和数据并行/模型并行的要求下,框架越复杂,用户上手难度就越大。TF2.0的框架已经很复杂了。目前的TF2.0架构已经很复杂了。来源:https://www.pyimagesearch.com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/大版本更新伤害了老用户又一个麻烦问题就是TF2.0肯定是想把它打造成无论是在研究还是生产中都非常流行的深度学习框架。所以在版本更新的时候大跃进,砍掉了1.x时代的很多API,希望能让追求简单功能的用户使用。但是别忘了,生产级代码产品最怕的就是——不向下兼容的突然版本更新。很多企业,一旦部署了一个模型,就希望它能够稳定支撑业务很多年。除非有真正的需要(安全问题、性能需要重大更新),否则他们没有太多更新的动力。不过官方为了吸引新用户使用TF2.0,大手笔砍掉了很多API,与老版本不兼容。考虑到重新开发、训练和部署模型的成本,以及这个过程中可能对企业业务造成的影响,业界对此次更新兴趣不大。更不用说,当新版本实际上存在致命错误时。今年1月,用户发现TF2.0的tf.kerasAPI中的dropout失效。虽然是内测版的问题,但面对如此不稳定的更新,几乎没有用户敢更新使用。且不说版本更新对开源社区的影响,很多开发者都需要重新开始学习2.0。从1.x到2.0的学习成本也是他们觉得TF2.0不好用的原因之一。另外,从时间上来说,TensorFlow比PyTorch早了好几年,但是最近被PyTorch推了。此前有人猜测,TF小队可能分为三部分。一路人忙着开发2.0,一路人忙着改变心切,还有人专注于重建Keras。这种分心可能会大大削弱TensorFlow在用户体验方面的投入,所以才造成了现在这种“怨声载道”的局面。现在,TensorFlow和PyTorch仍然保持着“工业界vs学术界”的局面。但随着PyTorch的高歌猛进,这种情况可能很快就会改变。当然,作为最流行的深度学习框架之一,总有一些人需要使用TensorFlow2.0的原因。对于这部分读者,我们推荐一个GitHub教程:《TensorFlow 2.0 深度学习开源书》。该项目曾登上GitHub热榜,目前拥有5500颗星。本教程有配套的学习书籍、代码和视频课程,非常适合想学习tf2.0的开发者作为学习参考。项目链接:https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book