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