PyTorch成学术界宠儿,TensorFlow何去何从?

说到时下最火的两个深度学习框架,莫过于PyTorch和TensorFlow了。

近日,美国知网Reddit机器学习社区中的一则热帖引发了讨论,Horce He在其个人论坛中发表了一篇题为《2019年机器学习框架的状态》的文章,指出了PyTorch的增长在研究领域已经大幅超越TensorFlow,研究人员正在舍弃TensorFlow并大量涌向PyTorch。同时,在工业界中,TensorFlow仍然是首选平台,但从长远来看可能并非如此!
在这里插入图片描述
PyTorch成学术界宠儿

有人质疑这些结果是否只能适用于NLP(自然语言处理)会议,现在从NeurIPS 2019会议的分析结果来看,答案是否定的!在NeurIPS中,使用PyTorch的论文数量由去年的68篇增长为166篇,而使用TensorFlow的论文数量则由91篇降低为74篇。第十九届NeurIPS接收的论文中使用PyTorch作为深度学习框架的占据了69%。

从Horche He做的折线图可以看出,在CVPR、ICCV、ICLR各大顶会上,采用PyTorch的论文数量大幅增长,而TensorFlow则面临增长放缓及下降的态势。

在这里插入图片描述

下图显示了2017-2019年,在主要AI顶会上,仅提及PyTorch的论文占深度学习框架的比例。可以看出,所有的线条都在向上倾斜,并且在2019年的每个主要会议上,大多数论文都在PyTorch中实现。

在这里插入图片描述

如果需要更多证据证明PyTorch在学术界的发展速度有多快,下图是PyTorch和TensorFlow被提及的数量对比图!

在这里插入图片描述

作者对其进行了解释,研究人员考虑的是科研的速度而非性能,即哪一种框架能够让他们更快更好地实践想法。PyTorch是可以替代numpy的存在,可以轻松与Python生态系统的其余部分集成。而在TensorFlow中,调试模型需要一个活动会话,并且最终会非常棘手。与TensorFlow的API相比,大多数研究人员更加喜欢PyTorch的API。其设计的更好,而TensorFlow则需要进行多次切换。在性能方面,PyTorch在支持动态图计算的基础上,其运行速度与TensorFlow并没有拉开明显差距,甚至在一些测试中要快于TensorFlow!

TensorFlow仍为工业界长子

根据2018年至2019年的招聘网站数据,TensorFlow有1541个新职位,PyTorch有1437个。TensorFlow的Medium文章有3230篇,PyTorch有1200篇;TensorFlow有13700篇Github新星,PyTorch则有7200篇。

除了TensorFlow的长子优势,使得工业界采用较早之外。

PyTorch在工业界的应用中存在很多限制性因素。企业无法承担高昂的Python运行开销;无法在mobile binary中嵌入Python解释器;无法提供一个全面服务的功能,如不停机更新模型,无缝切换模型,在预测时间上进行批处理等等。

而TensorFlow则是专门针对这些需求构建的,并为所有问题提供了相应的解决方案:图形格式和执行引擎本来就不需要Python,TensorFlow Lite和TensorFlow Serving则分别解决了移动端和服务的问题。TensorFlow 2.0提供的eager模式使得其具有PyTorch的大部分优势(易用性和可调试性等)。

在这里插入图片描述

然而业界却对这种模式褒贬不一。因为这种模式完全继承了PyTorch的缺点,即模型不能导出到非python环境,不能进行优化,不能在移动端运行等等。

TensorFlow & PyTorch

1 框架简介

TensorFlow是机器学习框里的佼佼者,Google家族的贵公子。于2015年对外开源、官方研究发布于论文《TensorFlow:异构分布式系统上的大规模机器学习》。支持C++和python编程,计算图以静态方式定义,现已被公司广泛应用于自动化工作任务和开发新系统上,其在分布式训练支持、可扩展的生产和部署选项、多设备支持方面备受好评。

PyTorch是神经网络新框架,父母来自Facebook AI研究小组。于2017年在GitHub上开源。简洁易用,支持动态计算图而且内存使用高效。深受研究人员青睐。

在这里插入图片描述

2 机制差异

PyTorch和TensorFlow的关键差异在于执行代码的情况。两种框架都在张量上运行,把任何模型看做一个有向非循环图,但对于如何定义它们,PyTorch和TensorFlow区别很大。
在这里插入图片描述
TensorFlow遵循数据即是代码,代码即是数据的理念。在跑模型之前会静态的定义图形。与外部世界的所有通信都是通过tf.Sessionobject和tf.Placeholder执行,它们是在运动时会被外部数据替代的张量。
在这里插入图片描述
而PyTorch则可以按需和动态构建计算图。你可以随着进展定义、更改和执行节点,没有特殊的绘画界面或占位符。整体来看,PyTorch与Python结合的更加紧凑些。而在TensorFlow里写东西时,你会觉得自己的模型好像躲在一堵墙后面,就通过墙上的洞洞与你交流。

在这里插入图片描述

3 可视化

可视化能够帮助开发者跟踪训练过程以及实现更方便的调试,TensorFlow的可视化库名为TensorBoard。PyTorch则使用Visdom。TensorBoard可以跟踪和可视化损失和准确度等指标。将计算图、权重、偏差或其他张量随时间变化的情况以图像、文本和音频的形式进行分析。而Visdom提供的功能则简单有限。
在这里插入图片描述
4 部署情况

TensorFlow内置框架TensorFlowServing能够让你在特制的gPRC服务器上部署模型,支持移动端。在PyTorch中,需要使用FlasK或其他工具在模型上编写REST API。没有提供任何用于在网络上直接部署模型的框架。

5 并行化执行

PyTorch不同于TensorFlow的一个主要差异就是声明数据并行化。你可以封装任何模型,并且在批处理维度上实现并行。而在TensorFlow中,则必须手动编写代码,并且微调在特定设备上的每个操作。尽管也能够实现PyTorch所有操作,但是要麻烦的多(不过会有更多的控制权)。

发布了42 篇原创文章 · 获赞 2 · 访问量 5591

猜你喜欢

转载自blog.csdn.net/ConferenceEye/article/details/103161096