TensorFlow和PyTorch是交付机器学习项目的两个最流行的框架。 两者都是伟大的多功能工具,然而它们之间有几个重要的区别,使它们更适合于特定的项目。那么,这些区别是什么呢?
此外,还有其他多个框架用于处理大数据和机器学习。在比较中省略它们是否公平?
机器学习框架格局
目前,至少有6种框架:
- Scikit-Learn
- TensorFlow
- PyTorch
- CAFFE
- 微软认知工具包
- Firebase
除了它们在谷歌搜索中的受欢迎程度,没有直接的方法来比较它们。考虑到这一点。

Tensorflow和PyTorch的双头垄断是毋庸置疑的--只有这两个做出的数字足够大,才能被搜索引擎注意到。你可以看到Caffe和Microsoft Cognitive工具包被包括在图表中,但其余的没有被包括在内,因为每月的搜索量很低,不可能进行比较。
所以,这里有PyTorch,有TensorFlow,还有一大堆空荡荡的虚无。
Keras与PyTorch?
直到最近,在网络上的大多数文章和指南中,比较Keras和Pytorch而省略TensorFlow的做法很常见。这背后的原因很简单--Keras是一个高级的API,可以在 "TensorFlow之上 "使用,以访问它所提供的功能,而不需要咀嚼代码的更复杂方面。
Keras显得非常好,以至于它被纳入了TensorFlow项目,目前是它的一个固有部分。因此,现在只是关于PyTorch与TensorFlow的比较。
什么是TensorFlow,一目了然?
TensorFlow最初是由谷歌大脑团队开发的。它是一个用于数值计算和大规模机器学习的开源库。因此,它被用于多个重型设备中。
该技术使开发者能够提供一个图。一个图也可以被认为是来自一系列处理节点的一个实例。高层工作环境在Python和节点或TensorFlow的张量和Python对象中工作。但另一方面,计算是以高性能的C++二进制文件进行的。
什么是PyTorch,一目了然?
PyTorch是一个Facebook支持的框架,是TensorFlow的直接竞争对手,提供类似的功能。该框架由Facebook人工智能研究实验室开发,并作为开源软件在BSD许可下发布。
该软件是基于最初使用Lua编程语言开发的Torch库。PyTorch利用了Python的普及和灵活性,同时保持了原始Torch库的便利性和功能。
Pytorch与Tensorflow--详细比较
从非专业人士的角度来看,PyTorch和TensorFlow之间的唯一显著区别是支持其开发的公司。值得注意的是,在2020年,这两个框架之间曾经非常显著的差异现在已经越来越不明显,它们都在努力跟上竞争的步伐。尽管如此,它们仍然远非完全相同。
事实上,这些框架之间有几个重要的区别,数据科学家和项目经理需要了解。
易用性
TensorFlow曾经是一个低杠杆的深度学习框架,通过引入Keras高级API变得更加友好。事情在TensorFlow 2.0中发生了重大变化,Keras被纳入了核心项目。
从那时起,这两个框架都变得用户友好,并且在日常工作中相对容易应用。
TensorFlow
TensorFlow现在比以前更加友好和方便。该框架既包括高级别的API,也包括用于构建复杂项目的更复杂的工具。自从将Keras纳入该项目后,多种冗余和不一致的地方被裁减,该框架提供了一个稳定和干净的工作环境。
当涉及到日常工作中的TensorFlow时,该框架提供了一个更简洁的、更简单的API。这使得项目不再臃肿,代码更加优雅。通常情况下,这将是相同数量的代码。然而,我们可以找到一些TF更精确时的例子。
PyTorch
PyTorch提供了一个更灵活的环境,代价是自动化程度略有下降。事实上,对于那些对深度学习概念和常用算法背后的想法有更深理解的团队来说,这个环境是一个更好的选择。
该框架在构造上更加 "Pythonic",所以事实上,一个在Python编程方面有更多技能的数据科学家可以利用这一技能从该框架中获得更多,并以更自然的方式使用它。
但是这种灵活性是有代价的--这个流行的深度学习框架需要更多的代码行来交付项目。差异可能很大--一个简单的训练循环在PyTorch中需要五行代码,而在TensorFlow中只需要一行。
例子
定义一个训练循环是一个用例,在PyTorch中编写代码需要更多的代码行。一个典型的例子是这样的。
Tensorflow与Keras。
PyTorch。
图形定义
当涉及到数据科学时,图是必不可少的,就像道路对于交通和运输是必不可少的一样。直到最近,对待图的方法是TensorFlow和PyTorch之间的关键和最重要的区别。现在,这不是一个大的区别,因为TF引入了急切模式的动态计算图,而PyTorch引入了静态计算图。所以你可以在TF和PyTorch中同时拥有,这取决于你的需要。
然而,这个传统保持得很好,要折腾这个传统并不容易。
TensorFlow
经典的TensorFlow图是静态定义的,所以数据科学家(或任何其他用户)在运行模型之前可以立即访问其轮廓。这允许对训练过程、数据流和被处理的数据种类进行大量的控制。另外,TensorFlow中的图在编译后不能被修改,所以在设计阶段的优势可能会在以后造成很大的限制。
在Tensorflow 2.0中,动态计算图被引入到急切执行中,这在默认情况下是可用的。当变量被声明时,计算图被动态地建立。当函数被调用时,它被运行并提供输出。
PyTorch
PyTorch会随即生成一个动态图,提供动态计算图。所以在计算运行之前,根本就没有图。 你也可以随时对图进行操作,这对于像递归神经网络这样的深度学习架构来说非常方便,因为你需要可变长度的输入。这也使得代码的调试变得相当容易。
另一方面,PyTorch现在也允许建立一个静态的计算图,所以你在这两个框架中都有可能。
下面是一个在图中运行的简单加法运算的例子(差别不大)。
Tensorflow 2.0。
Pytorch。
可视化
虽然编程仍然是关于交付代码,但机器学习可以被看作是以数据为中心的编程。有一个方便的工具来提供一些可视化,可以改变游戏规则,减轻数据科学家的工作,特别是在参数调整和耗时的训练过程中。
TensorFlow
TensorFlow有一个方便灵活的TensorBoard仪表盘,专门用于提供可视化。该工具已经作为一个轻量级、多功能的工具获得了认可。
TensorBoard可以作为个人(或整个组织)的工具来跟踪项目相关的指标,如准确性和损失。关于TensorBoard的更多信息可以在项目网站上找到。
PyTorch
PyTorch没有专用的可视化工具。然而,有多种外部工具--你也可以使用TensorBoard,它的效果很好。
研究用途
虽然极端的灵活性是有代价的,但在研究工作中,它是一种难以忽视的资产。因为研究的核心是突破 "常规方法 "的界限,尝试新技术。

TensorFlow
TensorFlow提供了一个稳定和可读的环境,然而它缺乏实验项目中所需要的灵活性。改变训练循环中的一些核心模块可能需要深入挖掘代码,并充分了解官方文档。
PyTorch
PyTorch在交付所有研究工作时占主导地位,说人工智能和ML的最新进展都是在PyTorch中完成的是公平的。该框架的结构是这样的:修改或创建具有新功能的新类是非常容易的。
大多数领先的科学会议所发表的论文的支持代码都是用PyTorch编写的。对不起,TensorFlow,这次不行。
部署生产使用
研究论文的世界是迷人和诱人的,然而学术界可能远离日常正常工作。而且,最终,这种日常劳动为每个人带来了更好的生活,无论是VOD平台使用的推荐引擎还是相机中的AI图像识别。
TensorFlow
基于TensorFlow的模型的可预测性、可读性和稳定性使它们成为生产和业务相关的应用和面向业务的模型部署的更好选择。
另外,TensorFlow更容易在云中运行。在云环境中提供基于人工智能的解决方案,可以说是在构建现代的、面向商业的人工智能解决方案时的一种标准方法。虽然学术界可以使用内部的超级计算机和可以在特定的、基于集群的机器上进行研究,但企业享受云计算的便利和可扩展性。在亚马逊Sagemaker(如Tensorflow Estimator)和谷歌云平台(TensorFlow Cloud)上都有专门设计的工具和实例,使TensorFlow的工作特别容易。
Tensorflow提供了TensorFlow-Serve,它允许你无缝地将你的模型部署到生产中,并轻松管理不同的版本。
此外,利用Tensorflow Lite可以很容易地在轻量级平台上部署TensorFlow模型,如移动或物联网设备,它允许更轻的模型实现,而不会对模型的准确性造成太大的损失。
最后但并非最不重要的是,TensorFlow更容易在Tensor Processing Unit(TPU)上运行,这是谷歌设计的芯片,仅用于机器学习目的。它可以被认为是模型的火箭燃料,在TensorFlow上使用它更容易。
PyTorch
另一方面,PyTorch是一个伟大的软件,但它甚至享受不到TensorFlow提供的一半的好处。因此,事实上,当涉及到提供面向生产的软件时,TensorFlow就会大放异彩。
为了跟上Tensorflow-Serve,PyTorch最近(2020年6月)推出了自己的解决方案PyTorch-Serve,但这个软件包还不能提供TensorFlow-Serve的全部功能和易用性。同样,他们也有正在开发的PyTorch Mobile,它不像Tensorflow Lite那样受欢迎或多功能。
受欢迎程度和学习资源的获取
这两个项目都享有可读的文档和大量的用户基础。两者都有爱好者和讨厌者,都有大量的用户群体来寻求建议。TensorFlow的人群更大,而且更注重工业/生产,而PyTorch的人群则更注重研究。
事实上,当涉及到流行和学习资源时,没有明显的差异。
调试、自省和代码审查
即使是最好的项目也会有调试的时候。那么,PyTorch和TensorFlow之间是否有明显的区别时?

TensorFlow
TensorFlow享有它所强迫的明确设计的所有好处。因此,它更容易检查简单网络中的bug和错误,这在不太复杂的商业解决方案中很常见。它是一个可靠的工具,可以提供一套标准的代码,并运行它以提供某种结果。
令人惊讶的是,考虑到上面看到的TensorFlow的稳定性和可靠性,该框架附带了一个来自地狱的调试器(精确地说是 "tfdbg")。因此,在一个更大和更复杂的项目中工作可能是具有挑战性的,甚至是痛苦的。
另外,TensorFlow还带有恼人的内存管理功能。默认情况下,TensorFlow保留了GPU上所有可用的内存,所以你将不能在同一个GPU上运行另一个进程,即使它没有被积极使用。它可以被手动管理,但这个过程充其量是烦人的,最糟糕的是让人沮丧。
PyTorch
有了使用PyTorch所带来的所有灵活性和自由,该框架需要一个可靠和方便的调试器是很好理解的。而这正是问题的关键所在--当涉及到交付复杂的神经网络时,PyTorch是一个更好的选择,因为深藏的错误可能会毁掉数周的工作。使用标准的Python工具(如pdb)在PyTorch中进行调试是非常容易的。
结论--PyTorch和TensorFlow哪个更好
TensorFlow和PyTorch都是很好的工具,使数据科学家的生活更轻松、更美好。当涉及到挑选更好的工具时,它不是关于第一或第二的工具。它是关于要交付的预期效果。
两个框架都有优点和缺点。由于双方都有优秀的开发人员,这两个框架自然会变得更好,并改进其缺点,使比较更加困难,其差异不那么明显。因此,当问到 "选哪一个?"的问题时,最好的答案是 "最适合项目的那个"。
最后,这两种工具都不是生活在真空中。它们不断地相互影响,模仿它们最方便的解决方案,同时扔掉过时的解决方案。因此,很可能在不久的将来,两者会相似到无法区分的地步。因此,事实上,很快可能就不会有 "TensorFlow和PyTorch哪个更好 "这样的问题。