📜  PyTorch和TensorFlow之间的区别

📅  最后修改于: 2020-11-10 06:28:41             🧑  作者: Mango

PyTorch与TensorFlow

开始新项目时,需要了解PyTorch和TensorFlow之间的区别。当开发人员决定从事深度学习或机器学习研究时,图书馆起着至关重要的作用。根据一项调查,使用PyTorch的有1,616名ML开发人员和数据科学家,而使用TensorFlow的有3.4 ML开发人员。

我们将基于以下因素比较这两个框架:

1)起源

PyTorch是基于Torch库的机器学习库。 Facebook的人工智能研究小组开发了该应用程序,例如深度学习和自然语言处理。它是免费的开源软件,已根据Modified BSD许可发布。 Tensor Flow也是一种开源机器学习,最初由Google开发。

2)特点

PyTorch具有一些吸引人的功能,例如:

  • 对Python机支持
  • 动态计算图
  • 支持CUDA

这些功能可确保减少运行代码的时间并提高性能。另一方面,TensorFlow还具有出色的功能和吸引人的功能,例如TensorBoard,这在可视化机器学习模型时将是一个不错的选择。它还提供TensorFlow Serving,这是一个特定的grpc服务器,在生产过程中的部署期间使用。

3)社区

PyTorch的社区比TensorFlow小得多。 TensorFlow被商业组织,学术界等各个领域的许多研究人员所采用。在TensorFlow中,更容易找到资源或解决方案。 TensorFlow和PyTorch中有大量的教程,代码和支持。

4)API级别

如果我们要讨论API,那么TensorFlow是最好的API,因为它同时提供了高级API和低级API。 PyTorch提供了较低级别的API,该API专注于数组表达式的直接工作。去年,PyTorch引起了极大的兴趣,并成为需要优化自定义表达的学术研究和深度学习应用的首选解决方案。

5)速度

PyTorch和TensorFlow是两个最受欢迎的深度学习框架。如果我们在家里工作,并且正在实施第一个深度学习项目,则PyTorch非常适合。但是,如果我们在办公室里工作,则会使用TensorFlow,并且我们对深度学习项目有很好的了解。如果我们将PyTorch和TensorFlow的速度进行比较,那么这两个框架的步伐都差不多,既快又适合性能。

6)人气

基于受欢迎程度,TensorFlow被广泛使用,而不是PyTorch。每个组织都需要具有大型数据集执行高性能的简单易读的体系结构。 PyTorch比TensorFlow还年轻,并且普及迅速。 PyTorch允许自定义,而TensorFlow不允许。 TensorFlow拥有最多的GitHub活动,Google搜索,中型文章,有关Amazon的书籍和ArXiv文章。大多数开发人员都使用它,并且在大多数在线职位描述中也列出了它。

7)加速时间

PyTorch是NumPy的GPU支持的替换组件,它配备了用于构建和训练深度神经网络的高级功能。如果我们熟悉Python,NumPy和深度学习抽象,它将使PyTorch易于学习。当我们编写TensorFlow代码时,它将首先被Python “编译”为图形,然后由TensorFlow执行引擎运行。 TensorFlow还有一些额外的概念需要学习,例如图形,会话,占位符和变量作用域。 TensorFlow的加速时间肯定比PyTorch更长。

8)覆盖范围

TensorFlow本身支持某些操作,例如沿尺寸翻转张量,检查张量是否适用Nan和Infinity以及Fast Fourier变换。它还具有用于创建更多模型的contrib软件包。它为使用高级功能提供了支持,并为我们提供了广泛的选择。

PyTorch仍然实现的功能较少,但是由于大家的关注,它将很快被真正桥接。在学习者和自由职业者中,PyTorch作为TensorFlow并不流行。

9)部署

对于小型服务器端部署,这两种框架都易于包装。 TensorFlow适用于移动和嵌入式部署。将TensorFlow部署到Android和IOS上需要大量的工作。我们不必用C++或Java重新编写模型的整个推理部分。不关闭服务就无法轻松地热交换PyTorch,但是TensorFlow可以轻松地进行热交换。

10)序列化

两种框架的加载和保存模型都非常简单。 PyTorch有一个简单的API,可以根据需要腌制整个类,也可以保存模型的所有权重。在序列化中,TensorFlow的主要特征是整个图可以保存为协议缓冲区,并且还包括参数和操作。之后,将以其他受支持的语言(例如Java和C++)加载图形。 TensorFlow对于无法使用Python的部署堆栈至关重要。当您更改模型源代码时,TensorFlow可能很有用,但它应该能够运行旧模型。

11)图的构建与调试

PyTorch具有创建图形的整个过程的动态特性。可以通过解释对应于图形特定方面的代码行来构造图形,从而使其完全基于运行时。

使用TensorFlow,图的构建是静态的,需要进行编译。之后,它将在我们前面提到的执行引擎上运行。

12)可视化

在我们介绍组织中的任何项目时,可视化都起着重要的作用。为了可视化机器学习模型,TensorFlow具有TensorBoard,可在训练模型期间帮助您快速发现错误。它是模型图的实时表示,不仅显示图形表示,而且还实时显示精度图。 PyTorch中缺少此功能。

13)建筑

如果我们将PyTorch和TensorFlow与其架构进行比较,那么PyTorch的架构将非常简单,而不是TensorFlow。尽管TensorFlow提供Keras作为使工作变得更轻松的框架,但它并不是很容易使用。当我们将PyTorch与TensorFlow进行比较时,它的可读性较低。

14)数据集

PyTorch通常用于低性能模型,而大型数据集则使用TensorFlow用于高性能模型和大型数据集。 TensorFlow在大型数据集的执行中起着至关重要的作用,这需要快速执行。 PyTorch更为简单,但并未使用,因为每个组织都有一个大型数据集,可以高效执行。当我们要执行性能较低的大型数据集时,可以使用PyTorch。

15)文档

PyTorch和TensorFlow均基于Python编程语言。 Python API有充分的文档记录,因此通常会找到最佳的API。使TensorFlow最好的是一件事,那就是PyTorch C库几乎没有文档。但是,这仅在编写自定义C扩展时才可能重要,并且可能对整个软件有所帮助时也是如此。

16)设备管理

在TensorFlow中,设备管理是一件轻而易举的事,这意味着我们无需指定任何内容,因为默认值设置得很好。在TensorFlow中,如果GPU可用,那么它将自动假定我们要在GPU上运行。 TensorFlow管理的缺点是,即使仅使用一个GPU,它也会占用可用GPU上的所有内存。

另一方面,在PyTorch中,即使启用了CUDA,尽管我们必须显式移动设备上的所有内容。该代码需要更频繁地检查CUDA和更明确的设备管理。

17)自定义扩展

绑定或构建以C,C++或CUDA编写的自定义扩展对于这两种框架都是可行的。当然,尽管清洁器支持多种类型和设备,但TensorFlow需要更多样板代码。

在PyTorch中,我们可以简单地为特定的CPU和GPU版本编写接口和实现。

使用这两个框架(PyTorch和TensorFlow)直接编译自定义扩展。无需在pip安装之外下载任何标头或源代码。

结论

最后,我们发现PyTorch和TensorFlow相似。 PyTorch非常Python风格,使用起来非常舒适。它具有良好的启动时间和文档,并且比TensorFlow快得多。与TensorFlow相比,PyTorch的社区较小,并且缺少一些有用的工具(例如TensorBoard),这使TensorFlow与PyTorch相比是最好的。

我们可以根据自己的喜好(我们要编写的代码)并根据我们的要求使用这两个框架。

我们得出的结论是,PyTorch最好在家里使用,而TensorFlow最好在办公室使用。

PyTorch和TensorFlow的比较

S. No Comparison Factors Pass Fail
1. Features TensorFlow PyTorch
2. Community TensorFlow PyTorch
3. Level of API TensorFlow PyTorch
4. Speed PyTorch TensorFlow
5. Popularity TensorFlow PyTorch
6. Ramp-Up Time PyTorch TensorFlow
7. Coverage TensorFlow PyTorch
8. Deployment TensorFlow PyTorch
9. Serialization TensorFlow PyTorch
10. Graph constructing and Debugging PyTorch TensorFlow
11. Visualization TensorFlow PyTorch
12. Architecture PyTorch TensorFlow
13. Dataset TensorFlow PyTorch
14. Documentation PyTorch, TensorFlow
15. Device Management TensorFlow PyTorch
16. Custom Extension PyTorch TensorFlow