PyTorch 与 TensorFlow:深度比较
深度学习的日益普及创造了深度学习框架之间的良性竞争。 PyTorch 和 TensorFlow 作为两个最流行的深度学习框架脱颖而出。这些库正在为率先成为主要的深度学习工具展开正面竞争。
TensorFlow 较老,因此一直处于领先地位,但 PyTorch 在过去六个月赶上了。在为项目选择深度学习框架时,在做出正确选择时存在很多困惑。
本文比较了 PyTorch 与 TensorFlow,并提供了两个框架的深入比较。
PyTorch 与 TensorFlow:概述
PyTorch 和 TensorFlow 都会跟踪他们的竞争对手在做什么。但是,这两个框架之间仍然存在一些差异。
注意: 此表格可水平滚动。
库 | PyTorch | TensorFlow 2.0 |
---|---|---|
创建者 | FAIR 实验室(Facebook AI 研究实验室) | 谷歌大脑团队 |
基于 | 手电筒 | Theano |
生产 | 研究重点 | 专注于行业 |
可视化 | 视觉 | 张量板 |
部署 | Torch 服务(实验性) | TensorFlow 服务 |
移动部署 | 是的(实验性) | 是的 |
设备管理 | CUDA | 自动化 |
图形生成 | 动态和静态模式 | 渴望和静态模式 |
学习曲线 | 对开发人员和科学家来说更容易 | 更容易进行行业级项目 |
U 案例 | 脸书 车联网 特斯拉 自动驾驶仪 优步 高温 | 谷歌 创新工场 风险投资 贝宝 中国移动 |
1。可视化
手工完成的可视化需要时间。 PyTorch 和 TensorFlow 都有用于快速可视化分析的工具。这使得审查培训过程更容易。可视化也非常适合展示结果。
TensorFlow
Tensorboard 用于可视化数据。该界面是交互式的且具有视觉吸引力。 Tensorboard 提供了指标和训练数据的详细概述。数据很容易导出,看起来非常适合演示目的。插件使 Tensorboard 也可用于 PyTorch。
但是,Tensorboard 使用起来很麻烦,也很复杂。
PyTorch
PyTorch 使用 Visdom 进行可视化。该界面轻巧且易于使用。 Visdom 是灵活和可定制的。对 PyTorch 张量的直接支持使其易于使用。
Visdom 缺乏交互性和许多用于概览数据的基本功能。
2。图生成
有两种类型的神经网络架构生成:
- 静态图 – 固定层架构。首先生成地图,然后通过它推送数据。
- 动态图表 – 动态层架构。地图是通过数据重载隐式定义的。
TensorFlow
TensorFlow 从一开始就使用静态图。静态图允许分布在多台机器上。模型独立于代码部署。在使用新架构时,静态图的使用使 TensorFlow 对生产更加友好和灵活。
TensorFlow 添加了一项模拟动态图的功能,称为急切执行。 TensorFlow 2 默认在 Eager Execution 上运行。关闭 Eager Execution 时可以生成静态图。
PyTorch
PyTorch 从一开始就具有动态图。这一特性使 PyTorch 与 TensorFlow 竞争。
事实证明,随时随地更改图形的能力是一种对程序员和研究人员更友好的神经网络生成方法。使用动态图更容易处理结构化数据和数据中的大小变化。 PyTorch 还提供静态图。
3.学习曲线
学习曲线取决于以前的经验和使用深度学习的最终目标。
TensorFlow
TensorFlow 是更具挑战性的库。 Keras 函数使 TensorFlow 更易于使用。一般来说,对于刚开始深度学习的人来说,TensorFlow 是很难理解的。
这背后的原因是 TensorFlow 的多样化功能。有许多功能需要探索和解决。对于初学者来说,这会分散注意力并且是多余的。
PyTorch
PyTorch 是更容易学习的库。如果熟悉 Python,则代码更容易试验。在 PyTorch 中创建神经网络有一种 Pythonic 方法。 PyTorch 的灵活性意味着代码对实验友好。
PyTorch 的功能并不丰富,但所有基本功能都可用。 PyTorch 更容易上手和学习。
4.部署
部署是对软件开发团队很重要的软件开发步骤。软件部署使程序或应用程序可供消费者使用。
TensorFlow
TensorFlow 使用 TensorFlow Serving 用于模型部署。 TensorFlow 服务 专为生产和工业环境而设计。使用 REST 客户端 API 进行灵活且高性能的部署。 TensorFlow 服务 与 Docker 和 Kubernetes 很好地集成。
PyTorch
PyTorch 最近开始解决部署问题。 火炬发球 部署 PyTorch 模型。有一个用于应用程序集成的 RESTful API。 PyTorch API 可扩展用于移动部署。 火炬发球 与 Kubernetes 集成。
5. 并行和分布式训练
并行性和分布式训练对于大数据至关重要。一般指标是:
- 速度提升 – 顺序模型的速度(单 GPU)与并行模型的速度(多 GPU)的比率。
- 吞吐量 – 每单位时间通过模型的最大图像数量。
- 可扩展性 – 系统如何处理增加的工作量。
有两种分配训练工作量的方法:
- 模型并行性 – 模型的层在不同的设备上拆分。部分图表同时用于训练。
- 数据并行 – 所有设备都有整个模型的副本。每个设备都在不同的数据样本上进行训练。首选同步 SGD(随机梯度下降)方法。
TensorFlow 模型并行性
要将模型的一部分放置在 TensorFlow 中的特定设备中,请使用 tf.device
.
例如,在两个不同的 GPU 设备上拆分两个线性层:
import tensorflow as tf from tensorflow.keras import layers with tf.device(‘GPU:0’): layer1 = layers.Dense(16, input_dim=8) with tf.device(‘GPU:1’): layer2 = layers.Dense(4, input_dim=16)
PyTorch 模型并行性
使用 nn.Module.to
将模型的一部分移动到 PyTorch 中的不同设备 方法。
例如,将两个线性层移动到两个不同的 GPU:
import torch.nn as nn layer1 = nn.Linear(8,16).to(‘cuda:0’) layer2 = nn.Lienar(16,4).to(‘cuda:1’)
TensorFlow 数据并行
要在 TensorFlow 中进行同步 SGD,请使用 tf.distribute.MirroredStrategy()
设置分发策略 并包装模型初始化:
import tensorflow as tf strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = … model.compile(...)
使用包装器编译模型后,像往常一样训练模型。
PyTorch 数据并行
对于 PyTorch 中的同步 SGD,将模型包装在 torch.nn.DistributedDataParallel
中 模型初始化后,设置设备编号等级从零开始:
from torch.nn.parallel import DistributedDataParallel. model = ... model = model.to() ddp_model = DistributedDataParallel(model, device_ids=[])
6.设备管理
管理设备时会发生巨大的性能变化。 PyTorch 和 TensorFlow 都很好地应用了神经网络,但执行方式不同。
TensorFlow
如果 GPU 可用,TensorFlow 会自动切换到 GPU 使用。可以控制 GPU 及其访问方式。 GPU 加速是自动化的。这意味着无法控制内存使用。
PyTorch
PyTorch 使用 CUDA 来指定 GPU 或 CPU 的使用情况。如果没有用于 GPU 和 CPU 的 CUDA 规范,该模型将无法运行。 GPU 的使用不是自动化的,这意味着可以更好地控制资源的使用。 PyTorch 通过 GPU 控制增强了训练过程。
7.两种深度学习平台的用例
TensorFlow 和 PyTorch 最初是在各自的公司中使用的。自从开源以来,谷歌和 Facebook 之外的用例也很多。
TensorFlow
谷歌大脑团队的谷歌研究人员首先将 TensorFlow 用于谷歌研究项目。 Google 将 TensorFlow 用于:
- 搜索结果和自动完成。
- 语音转文本和语音技术。
- 图像识别和分类。
- 机器翻译系统。
- Gmail 垃圾邮件检测。
Google 之外也有许多用例。例如:
- 创新工场 – 使用视网膜图像进行疾病分类和分割。
- 贝宝 – 使用深度迁移学习和生成建模进行欺诈检测。
- 中国移动 – 用于网络问题检测、自动切换时间窗口预测和操作日志验证的深度学习系统。
PyTorch
Facebook AI 研究人员实验室 (FAIR) 首次在 Facebook 使用 PyTorch。 Facebook 将 PyTorch 用于:
- 面部识别和物体检测。
- 垃圾邮件过滤和虚假新闻检测。
- 新闻源自动化和好友推荐系统。
- 语音识别。
- 机器翻译系统。
PyTorch 是开源的。现在有很多 Facebook 之外的用例,比如:
- 车联网 – 使用卷积神经网络的肺炎概率评分和胸部 X 射线热图。
- 特斯拉自动驾驶仪 – 用于自动驾驶汽车的实时计算机视觉多任务处理。
- Uber AI 实验室 PYRO – 用于深度概率建模的概率编程语言。预测和优化客户与司机、最佳路线和下一代智能车辆的匹配。
你应该使用 PyTorch 还是 TensorFlow?
PyTorch 是程序员和科学研究人员最喜欢的选择。在查看引用次数时,科学界更喜欢 PyTorch。凭借最近的部署和生产功能,PyTorch 是从研究到生产的绝佳选择。
组织和初创公司通常使用 TensorFlow。部署和生产功能使 TensorFlow 在企业用例中享有盛誉。使用 Tensorboard 进行可视化也向客户展示了优雅的演示。
PyTorch 和 TensorFlow 是强大的深度学习库,正在密集开发。今天,两者之间的相似之处多于不同之处,从一个切换到另一个是一个无缝的过程。
云计算