本篇文章2853字,读完约7分钟

雷·技术评论:作为Google alphago背后的强大推动力,开源产品tensorflow在2015年底受到了极大关注。目前,在所有的机器学习框架中,如果说它是第二受欢迎的,没有人敢说他是第一个。

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

尽管有谷歌的支持,社区很好,资源也很多,但是学生在使用张量流的过程中经常会不小心跳进坑里,严重影响了体验。

最近,一个同学在智湖上问了一个问题[张量流有哪些不可接受的方面?】,表达张量流在使用中的不便,顺便问一下,是否有更好的方法绕过这些凹坑。仅在一个月内,这期杂志的页面浏览量就达到了100,000多,成千上万的人关注着它。

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

作为问题的提出者,这位同学也试图给出一个答案。他说,提出这个问题的初衷是为了引起人们对tf的更多的理性思考和进一步的讨论,而不是盲目的崇拜。在所有42个回复中,雷锋的《人工智能科技评论》也总结了一些有趣的现象。

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

张量流的图考会议

结合智湖网友的回答和业内相关人士对张量流的评价,《人工智能科技评论》梳理出张量流经常被“吐”的一些问题。

文档和界面混乱

因为它的应用编程接口发展太快,更新太频繁,一些常用的函数和方法会被不断地移动。例如,rnn将从前一个nn接口移动到contrib接口,在编写代码时需要经常阅读文档。底部接口写起来很麻烦,而顶部接口不灵活,封装混乱。

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

默认情况下,它会占用所有图形处理器的所有内存

在实验过程中,并不是每个人都有多个可用的图形处理器。当gpu不可用时,Tf会自动在cpu上运行,这一方面会降低速度,另一方面,当共享显卡时,您甚至不知道它在cpu上运行。虽然tf会打印设备信息,但tf启动时的输出信息太复杂,每次都无法仔细阅读。

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

使用麻烦

显然还有其他更通用的模块可以使用,但是tf模块应该在每个细节中使用。例如,虽然默认的python库argparse是可用的,但是tf.app.flags在许多tf示例代码中使用。

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

理解过程控制是非常困难的

语句中有条件分支,例如,当a>0时,很难调试a

Tensorflow是一个静态的图表框架,api经常变化。打印中间结果只能通过会话或学习额外的tfdbg工具来生效。如果您使用像pytorch这样的动态框架,您不需要学习额外的工具,只需使用像ipdb这样的普通python调试工具。

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

总的来说,在使用tf的过程中有很多非个人的地方。然而,并非每个工具都是完美的。虽然tf有许多缺陷,但是关于框架使用的统计数据可以最好地解释这个问题。所谓的“tf虐待我无数次,我把tf当成我的初恋。”

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

Tf渗透率遥遥领先

下表显示了github上每个开源框架的数据统计(数据统计是在2017年9月6日),我们可以看到tensorflow在星型、分叉型和贡献型的数量上优于其他竞争对手。

此外,特斯拉人工智能公司(Tesla ai)负责人安德烈·卡普西(Andrej Karpathy)通过分析过去五年(2017年初)arxiv的论文数据,比较了各种深度学习框架的使用情况,并查看了以下图片:

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

下图显示了2012年1月至2017年3月期间每个框架的使用发展趋势。

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

结合以上两张图片,我们可以看到,自从谷歌在15年末启动tensorflow以来,其用户数量一直在稳步增长,并且一直在高速增长。到3月17日,它已经处于不可动摇的地位。(pytorch在2017年1月才开放源码,所以这里没有可比性)

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

《艾科技评论》还总结了张量流的几个优点。

在谷歌的支持下,tensorflow拥有最完整的文档和资源,许多模型都有tf源代码实现。此外,用户基数很大,因此一旦出现问题,很容易找到解决方案。

张量流有一个强大的可视化组件,张量板,它可以可视化网络结构和训练过程。它有助于观察复杂的网络结构和监测长期和大规模的培训。

虽然张量流是一种静态的图形操作,它会给调试带来困难,但它将极大地方便部署。目前,除了caffe之外,没有其他架构可以支持静态图形操作,但是caffe编程比tf更复杂。

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

有趣的是,咖啡屋的作者贾也把改名为张量流上之湖。

他提到tf是目前唯一在核心设计层面支持动态控制流的框架,也是少数几个经历过大规模多应用部署测试的框架之一。张量流可以面对实际应用中的约束,部署到真正的核心产品中。它支持大规模推荐系统和移动产品的部署,这是许多框架无法实现的。

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

“tf确实很难,但它为您提供了真正产品化的可能性。当你只看到一棵树时,许多问题都很简单。当你看到森林时,解决办法是不同的。”

在计算了利弊之后,问题来了。对于那些不能忍受张量流缺点的人,他们正在考虑是否应该改变框架。对于那些还没有进入深坑的学生,他们应该使用什么样的框架?

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

当前主流框架之间的巨大反差

主流框架的比较是一个讨论已久的话题,相关的帖子和文章层出不穷。在今年3月的斯坦福大学cs231n会议上,李菲菲、贾斯汀·约翰逊和杨小莉还比较了当前的几种主流框架,并给出了建议。

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

Tensorflow并不完美,但它有利于部署并拥有稳定的社区。此外,它有许多图书馆,如喀拉斯和十四行诗。

Pytorch适合研究,但它是新的,所以你可能有很多漏洞需要填补。

除tensorflow外,caffe和caffe2也可用于产品部署。

手机上可以考虑张量流或caffe2。

此外,北京大学的吴炳哲也对智虎给出了很好的回答。他以前用pytorch、tensorflow和mxnet做项目,认为应该根据自己的需要选择模型。

当我需要快速验证我的一些想法时,我通常使用pytorch来快速实现它们。此外,pytorch的底部计算代码是用C语言编写的,它与torch共享一组底部计算代码。阅读原始代码和进行定制修改更容易。

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

当做一些有大量数据的长期训练时,我会使用张量流,比如张量流提供的张量板的训练和监督,以及它自己的分析和调试功能。另一个原因是,它可以轻松地将模型部署到手机上。现在咖啡二号出来了,这可能是一个更好的选择。

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

此外,在选择框架时,您还应该参考您已经完成的项目。例如,大多数在个人id中完成的工作都是基于caffe修改的。此时,您需要考虑将这些任务迁移到其他框架中,并且您会不时遇到坑。

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

Mxnet为对象定位提供了一些有效的实现。

他还强调,“现在框架迭代的速度越来越快。mxnet最近引入了gluon的接口,api是以pytorch为模型的。不久之后,张量流也将有一个相应的接口。”

摘要

在实验过程中,许多学生总是对框架想得太多。这个框架的速度是多少?使用起来有多容易?为什么文件这么乱?为什么使用起来这么不方便?接着发生了一连串的争吵。他们经常忽略最关键的东西,框架只是一种手段,重要的是你想解决什么问题,以及你解决问题的想法。

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

在这里,我借用贾的一句话,“框架就是框架,最后我要能活下去。”

雷锋。(公开号码:雷锋。人工智能科技评论。雷锋。

雷锋原创文章。严禁擅自转载。详情请参考转载说明。

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

地址:http://www.hcsbodzyz.com/hcxw/6950.html