PyTorch 教程-PyTorch vs. TensorFlow
在开始一个新项目之前,了解PyTorch和TensorFlow之间的差异是必要的。在深度学习或机器学习研究中,当开发人员决定使用哪个框架时,库扮演着至关重要的角色。根据一项调查,有1616名机器学习开发人员和数据科学家使用PyTorch,而有3.4名机器学习开发人员使用TensorFlow。
我们将基于以下因素比较这两个框架:
1) 起源
PyTorch是一个基于Torch库的机器学习库。它是由Facebook的人工智能研究组为应用程序开发的,如深度学习和自然语言处理。它是一款免费且开源的软件,采用修改后的BSD许可证发布。TensorFlow也是一款开源机器学习框架,最初由Google开发。
2) 特性
PyTorch具有一些吸引人的特性,如:
- 对Python的本地支持
- 动态计算图
- 对CUDA的支持
这些特性确保了代码运行的时间较短并提高了性能。另一方面,TensorFlow也具有一些卓越且吸引人的特性,例如TensorBoard,在可视化机器学习模型时是一个很好的选择。它还提供TensorFlow Serving,这是一个特定的grpc服务器,在生产中进行部署时使用。
3) 社区
PyTorch的社区规模远小于TensorFlow。TensorFlow被许多不同领域的研究人员采用,如商业组织、学术界等。在TensorFlow中,更容易找到资源或解决方案。TensorFlow和PyTorch都有大量的教程、代码以及支持。
4) API水平
如果我们谈论API,那么TensorFlow是最好的,因为它提供了高级和低级API。PyTorch提供了较低级别的API,侧重于直接与数组表达式进行工作。PyTorch在过去一年中引起了极大的兴趣,并且正在成为学术研究和深度学习应用的首选解决方案,这需要优化定制表达式。
5) 速度
PyTorch和TensorFlow是两个最受欢迎的深度学习框架。PyTorch适用于在家中工作并实现第一个深度学习项目。但是TensorFlow在办公室工作且对深度学习项目有卓越知识的情况下更为适用。如果比较PyTorch和TensorFlow的速度,那么两者都提供相似的速度,非常适合性能要求。
6) 受欢迎程度
根据受欢迎程度,TensorFlow比PyTorch广泛使用。每个组织都需要具有简单且可读性强的架构,以处理大数据集的高性能执行。PyTorch比TensorFlow年轻,但在受欢迎程度上迅速增长。PyTorch允许定制,而TensorFlow不允许。TensorFlow具有最多的GitHub活动、Google搜索、Medium文章、亚马逊图书和ArXiv文章。它被大多数开发人员使用,并在大多数在线职位描述中列出。
7) 上手时间
PyTorch是一个启用了GPU的NumPy插件,为构建和训练深度神经网络提供了更高级的功能。如果我们熟悉Python、NumPy和深度学习抽象,那么学习PyTorch会很容易。当编写TensorFlow代码时,它将首先通过Python将其“编译”成图,然后由TensorFlow执行引擎运行。TensorFlow需要学习一些额外的概念,如图、会话、占位符和变量作用域。TensorFlow的上手时间肯定比PyTorch长。
8) 覆盖范围
TensorFlow原生支持某些操作,例如沿某个维度翻转张量、检查张量是否包含NaN和无穷大以及快速傅立叶变换。它还有contrib包,用于创建更多的模型。它支持使用更高级别的功能,并为我们提供了广泛的选项来使用。
PyTorch目前实现的功能较少,但由于受到关注,很快就会填补这个差距。PyTorch在学习者和自由职业者中不如TensorFlow流行。
9) 部署
这两个框架都易于在小规模服务器端部署。TensorFlow在移动设备和嵌入式部署中表现良好。在TensorFlow中,将其部署到Android和IOS需要进行相当数量的工作。我们不必在C++或Java中重写模型推断部分的整个代码。PyTorch不能轻松进行热交换,而不会中断服务,但TensorFlow可以轻松做到这一点。
10) 序列化
使用这两个框架加载和保存模型都非常简单。PyTorch有一个简单的API,如果需要,可以将整个类pickle化,或者保存模型的所有权重。在序列化方面,TensorFlow的主要特性是可以将整个图保存为协议缓冲区,并包括参数和操作。之后,该图将加载到其他支持的语言中,如Java和C++。TensorFlow在Python不可选时对部署堆栈至关重要。当更改模型源代码时,TensorFlow可能很有用,但应能够运行旧模型。
11) 图构建和调试
PyTorch具有创建图的整个过程的动态性质。可以通过解释与图的特定方面相对应的代码行来构建图,因此它完全是在运行时构建的。
与此相反,TensorFlow的图构建是静态的,需要经过编译。之后,它将在我们之前提到的执行引擎上运行。
12) 可视化
在组织中展示任何项目时,可视化起着重要的作用。在可视化机器学习模型方面,TensorFlow具有TensorBoard,它在训练模型时有助于快速发现错误。它是模型图的实时表示,不仅显示图形表示,还实时显示准确性图形。这个功能在PyTorch中缺少。
13) 架构
如果将PyTorch和TensorFlow的架构进行比较,那么PyTorch的架构非常简单,而TensorFlow则不太容易使用,尽管提供了Keras作为一个使工作更容易的框架。与TensorFlow相比,PyTorch的可读性较低。
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最适合在家中使用,而TensorFlow最适合在办公室使用。
PyTorch和TensorFlow的比较
序号 | 比较因素 | 优势 | 劣势 |
---|---|---|---|
1. | 特性 | TensorFlow | PyTorch |
2. | 社区 | TensorFlow | PyTorch |
3. | API水平 | TensorFlow | PyTorch |
4. | 速度 | PyTorch | TensorFlow |
5. | 受欢迎程度 | TensorFlow | PyTorch |
6. | 启动时间 | PyTorch | TensorFlow |
7. | 覆盖范围 | TensorFlow | PyTorch |
8. | 部署 | TensorFlow | PyTorch |
9. | 序列化 | TensorFlow | PyTorch |
10. | 图构建和调试 | PyTorch | TensorFlow |
11. | 可视化 | TensorFlow | PyTorch |
12. | 架构 | PyTorch | TensorFlow |
13. | 数据集 | TensorFlow | PyTorch |
14. | 文档 | PyTorch, TensorFlow | |
15. | 设备管理 | TensorFlow | PyTorch |
16. | 自定义扩展 | PyTorch | TensorFlow |