在开始一个新项目之前,了解PyTorchTensorFlow之间的差异是必要的。在深度学习或机器学习研究中,当开发人员决定使用哪个框架时,库扮演着至关重要的角色。根据一项调查,有1616名机器学习开发人员和数据科学家使用PyTorch,而有3.4名机器学习开发人员使用TensorFlow。

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

1) 起源

7-1.png

PyTorch是一个基于Torch库的机器学习库。它是由Facebook的人工智能研究组为应用程序开发的,如深度学习和自然语言处理。它是一款免费且开源的软件,采用修改后的BSD许可证发布。TensorFlow也是一款开源机器学习框架,最初由Google开发。

2) 特性

7-2.png

PyTorch具有一些吸引人的特性,如:

  1. 对Python的本地支持
  2. 动态计算图
  3. 对CUDA的支持

这些特性确保了代码运行的时间较短并提高了性能。另一方面,TensorFlow也具有一些卓越且吸引人的特性,例如TensorBoard,在可视化机器学习模型时是一个很好的选择。它还提供TensorFlow Serving,这是一个特定的grpc服务器,在生产中进行部署时使用。

3) 社区

7-3.png

PyTorch的社区规模远小于TensorFlow。TensorFlow被许多不同领域的研究人员采用,如商业组织、学术界等。在TensorFlow中,更容易找到资源或解决方案。TensorFlow和PyTorch都有大量的教程、代码以及支持。

4) API水平

7-4.png

如果我们谈论API,那么TensorFlow是最好的,因为它提供了高级和低级API。PyTorch提供了较低级别的API,侧重于直接与数组表达式进行工作。PyTorch在过去一年中引起了极大的兴趣,并且正在成为学术研究和深度学习应用的首选解决方案,这需要优化定制表达式。

5) 速度

7-5.png

PyTorchTensorFlow是两个最受欢迎的深度学习框架。PyTorch适用于在家中工作并实现第一个深度学习项目。但是TensorFlow在办公室工作且对深度学习项目有卓越知识的情况下更为适用。如果比较PyTorchTensorFlow的速度,那么两者都提供相似的速度,非常适合性能要求。

6) 受欢迎程度

7-6.png

根据受欢迎程度,TensorFlow比PyTorch广泛使用。每个组织都需要具有简单且可读性强的架构,以处理大数据集的高性能执行。PyTorch比TensorFlow年轻,但在受欢迎程度上迅速增长。PyTorch允许定制,而TensorFlow不允许。TensorFlow具有最多的GitHub活动、Google搜索、Medium文章、亚马逊图书和ArXiv文章。它被大多数开发人员使用,并在大多数在线职位描述中列出。

7) 上手时间

7-7.png

PyTorch是一个启用了GPU的NumPy插件,为构建和训练深度神经网络提供了更高级的功能。如果我们熟悉Python、NumPy和深度学习抽象,那么学习PyTorch会很容易。当编写TensorFlow代码时,它将首先通过Python将其“编译”成图,然后由TensorFlow执行引擎运行。TensorFlow需要学习一些额外的概念,如图、会话、占位符和变量作用域。TensorFlow的上手时间肯定比PyTorch长。

8) 覆盖范围

7-8.png

TensorFlow原生支持某些操作,例如沿某个维度翻转张量、检查张量是否包含NaN和无穷大以及快速傅立叶变换。它还有contrib包,用于创建更多的模型。它支持使用更高级别的功能,并为我们提供了广泛的选项来使用。

PyTorch目前实现的功能较少,但由于受到关注,很快就会填补这个差距。PyTorch在学习者和自由职业者中不如TensorFlow流行。

9) 部署

7-9.png

这两个框架都易于在小规模服务器端部署。TensorFlow在移动设备嵌入式部署中表现良好。在TensorFlow中,将其部署到AndroidIOS需要进行相当数量的工作。我们不必在C++或Java中重写模型推断部分的整个代码。PyTorch不能轻松进行热交换,而不会中断服务,但TensorFlow可以轻松做到这一点。

10) 序列化

7-10.png

使用这两个框架加载和保存模型都非常简单。PyTorch有一个简单的API,如果需要,可以将整个类pickle化,或者保存模型的所有权重。在序列化方面,TensorFlow的主要特性是可以将整个图保存为协议缓冲区,并包括参数和操作。之后,该图将加载到其他支持的语言中,如Java和C++。TensorFlow在Python不可选时对部署堆栈至关重要。当更改模型源代码时,TensorFlow可能很有用,但应能够运行旧模型。

11) 图构建和调试

7-11.png

PyTorch具有创建图的整个过程的动态性质。可以通过解释与图的特定方面相对应的代码行来构建图,因此它完全是在运行时构建的。

与此相反,TensorFlow的图构建是静态的,需要经过编译。之后,它将在我们之前提到的执行引擎上运行。

12) 可视化

7-12.png

在组织中展示任何项目时,可视化起着重要的作用。在可视化机器学习模型方面,TensorFlow具有TensorBoard,它在训练模型时有助于快速发现错误。它是模型图的实时表示,不仅显示图形表示,还实时显示准确性图形。这个功能在PyTorch中缺少。

13) 架构

7-13.png

如果将PyTorch和TensorFlow的架构进行比较,那么PyTorch的架构非常简单,而TensorFlow则不太容易使用,尽管提供了Keras作为一个使工作更容易的框架。与TensorFlow相比,PyTorch的可读性较低。

14) 数据集

7-14.png

PyTorch通常用于低性能模型和大型数据集,另一方面,TensorFlow用于高性能模型以及大型数据集。TensorFlow在执行大型数据集时发挥了至关重要的作用,需要快速执行。PyTorch更简单,但由于每个组织都有一个用于高性能执行的大型数据集,因此很少使用。当我们想要使用低性能执行大型数据集时,可以使用PyTorch。

15) 文档

7-15.png

PyTorch和TensorFlow都基于Python编程语言。Python的API文档都很好,因此找到最佳的API是很常见的。有一件事使得TensorFlow更好,即PyTorch的C库大多数情况下没有文档。然而,这只有在编写自定义C扩展以及可能对软件总体进行贡献时才会有影响。

16) 设备管理

7-16.png

在TensorFlow中,设备管理非常容易,因为我们不必指定任何内容,因为默认设置得很好。在TensorFlow中,如果GPU可用,则自动假定我们希望在GPU上运行。TensorFlow管理的缺点是,即使只使用一个GPU,它也会占用所有可用GPU的内存。

另一方面,在PyTorch中,即使启用了CUDA,我们仍必须明确地将所有内容移动到设备上。代码需要更频繁地检查CUDA并进行更明确的设备管理。

17) 自定义扩展

7-17.png

使用两个框架都可以绑定或构建用C、C++或CUDA编写的自定义扩展。当然,TensorFlow需要更多的样板代码,尽管这样更清晰地支持多种类型和设备。

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

使用两个框架(PyTorch和TensorFlow)编译自定义扩展都是直截了当的,不需要在pip安装之外下载任何头文件或源代码。

结论

7-18.png

在这里,我们发现PyTorch和TensorFlow相似。PyTorch非常符合Python的风格,而且非常适合使用。它具有良好的启动时间和文档,而且速度比TensorFlow快得多。与TensorFlow相比,PyTorch的社区较小,并且缺少一些实用的工具,如TensorBoard,这使得TensorFlow在比较中更优越。

我们可以根据个人喜好(我们想要编写的代码)和需求使用两个框架。

我们得出结论,PyTorch最适合在家中使用,而TensorFlow最适合在办公室使用。

PyTorch和TensorFlow的比较

序号比较因素优势劣势
1.特性TensorFlowPyTorch
2.社区TensorFlowPyTorch
3.API水平TensorFlowPyTorch
4.速度PyTorchTensorFlow
5.受欢迎程度TensorFlowPyTorch
6.启动时间PyTorchTensorFlow
7.覆盖范围TensorFlowPyTorch
8.部署TensorFlowPyTorch
9.序列化TensorFlowPyTorch
10.图构建和调试PyTorchTensorFlow
11.可视化TensorFlowPyTorch
12.架构PyTorchTensorFlow
13.数据集TensorFlowPyTorch
14.文档PyTorch, TensorFlow
15.设备管理TensorFlowPyTorch
16.自定义扩展PyTorchTensorFlow

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库