跳至主要内容

PyTorch vs Tensorflow vs Keras

探索 PyTorch、TensorFlow 和 Keras——三大主流深度学习框架之间的关键差异。了解它们各自的特性、优缺点与适用场景,从而为您的项目选择合适的工具。
· 12分钟 阅读

使用 AI 探索

机器学习从业者和软件工程师通常会借助框架来减轻编程中的繁重工作。

例如,机器学习框架可以让从业者在不必深入研究算法数学原理的情况下实现模型。

这简化了程序员的开发流程,因为他们不需要为构建应用而反复重写代码。

这些理念同样适用于深度学习——机器学习的一个子集。TensorFlow、Keras 和 PyTorch 是最受欢迎的三大深度学习框架。

在本教程中,我们将逐一介绍它们,并给出一个粗略的决策思路,帮助您为项目选择合适的工具。

什么是 TensorFlow?

TensorFlow 是一个端到端的深度学习框架。它由 Google Brain 团队开发,最初用于谷歌内部的科研与生产;2015 年以 Apache 许可证开源。2019 年 9 月,谷歌发布了名为 TensorFlow 2.0 的更新版本。您也可以在我们的 TensorFlow 教程中更深入地了解该框架。

TensorFlow 的一些关键特性包括:

  • TensorBoard。用于 TensorFlow 的可视化工具集,有助于理解、调试和优化 TensorFlow 程序。
  • 特征列(Feature columns)。将原始数据转换为适合机器学习模型的高级抽象,简化对多样数据类型的处理。
  • CPU 与 GPU 上易于训练。TensorFlow 可在包括 CPU 和 GPU 在内的多种硬件上训练模型,实现灵活高效的计算。
  • 并行训练。TensorFlow 支持分布式计算,能在多台 CPU 或 GPU 上同时处理数据与模型,大幅加速训练。

TensorFlow 的优点

开源

TensorFlow 是开源框架,免费可用,任何人都无需与供应商预先签订合同即可使用。

调试

TensorFlow 的核心特性之一是 TensorBoard。TensorBoard 提供了进行实验所需的可视化与工具。

TensorBoard 为深度学习中的机器学习实验提供必要的可视化与工具,使调试 TensorFlow 代码容易得多。

与 Keras 的兼容性

谷歌在发布 TensorFlow 2.0 时,同时宣布 Keras 成为 TensorFlow 的官方高层 API。这使用户可以在代码中加入高层功能,并享受 Keras 简洁性的优势。

可扩展性

TensorFlow 并不局限于单一设备。用户可使用该框架开发系统,并期望其在边缘设备上与在其他复杂机器上一样高效运行。

兼容性

该框架兼容多种编程语言,因此用户可以使用自己最熟悉的语言进行开发。

TensorFlow 提供稳定的 Python API,同时也提供 Javascript、C++ 和 Java 的 API,但不保证向后兼容。此外,还有第三方包为 C#、Haskell、Julia、MATLAB、Object Pascal、R、Scala、Rust、OCaml 和 Crystal 提供语言绑定。

并行性

TensorFlow 被视为硬件加速库。该框架在 GPU 和 CPU 系统中使用不同的分布策略,这意味着用户可以自由选择所需的架构。请注意,如果未明确指定,系统将默认使用 GPU;这一过程在一定程度上还能减少内存占用。

TensorFlow 的缺点

频繁更新

由于频繁更新,用户在将 TensorFlow 安装并绑定到现有系统时的开销有所增加。

同名项不一致

TensorFlow 中存在同名项,因名称相同但实现不同而难以理解和使用。例如,tf.nn.conv2d 与 tf.layers.Conv2d 名称相同,但其设置略有差异,可能影响输出结果。

缺少符号循环

TensorFlow 常被称为低层 API——这是有原因的。该框架不会自动处理导致符号循环的迭代。不过,它适用于确定性序列,因此仍具备可用性。

受限的 GPU 支持

该框架在 GPU 编程上仅支持 NVIDIA 和 Python。没有额外的支持。

实现速度较慢

在所有硬件配置上,与竞争对手相比,TensorFlow 训练各类神经网络所需时间通常最长。

什么是 Keras?

Keras 是由 François Chollet 开发并于 2015 年发布的流行开源高层神经网络 API。其文档将其称为“一个为人类设计、而非为机器设计的 API”。

2017 年中期,该框架被采纳并集成到 TensorFlow 中,TensorFlow 用户可通过 tf.keras 模块使用它。不过,Keras 仍可独立于 TensorFlow 运行——请查看这份 Keras 速查表或我们的完整Keras 教程。

文档中还有如下说明:

“Keras 注重调试速度、代码优雅与简洁、可维护性与可部署性。选择 Keras,您的代码库会更小、更易读,也更易于迭代。借助 XLA 编译与 Autograph 优化,您的模型运行更快;并且在 TF Serving、TF Lite 与 TF.js 的支持下,更容易在各类环境(服务器、移动端、浏览器、嵌入式)上部署。”

Keras 的优点

简洁

Keras 拥有极其简单、友好的 API,便于学习并快速上手深度学习。

后端支持

Keras 本身不直接使用低层计算——它构建在 Microsoft CNTK、Theano 和 TensorFlow 之上。因此它鼓励使用后端。

预训练模型

预训练模型是指先前已在大型数据集上训练并保存下来的模型。Keras 开箱即用地提供了多种预训练模型。

快速试验

Keras 是高层 API;这意味着它抽象程度较高、通用性更强。因此,用户可以用几行代码快速搭建模型。

社区支持

Keras 是开源平台,拥有庞大的活跃研究者和开发者社区,彼此协作与支持。

文档清晰

Keras 文档包含大量带代码的示例,便于用户迅速掌握框架概念。

Keras 的缺点

部分特性仍可改进

许多从业者认为 Keras 的功能方面仍有不足,改进空间较大。例如,该框架不支持动态图表创建。

错误信息效率不高

Keras 库的错误信息不够有效,缺乏清晰可见的故障提示。定位错误的根本原因并不总是有用或直观,往往需要大量调试。

高层 API

Keras 是高层 API,因此对底层函数的可控性更少。

什么是 PyTorch?

PyTorch 是这三者中最年轻的深度学习框架。它由 Facebook(现 Meta)的 AI 研究团队开发,并于 2016 年开源,如今隶属于 Linux 基金会。

多年来,PyTorch 以其简单、灵活与高效著称。它让开发者能够快速构建用于神经网络、计算机视觉与自然语言处理等应用的复杂模型。

其一些关键特性包括:

  • 张量计算。PyTorch 提供了名为 Tensor 的多维数组,类似于 NumPy 的 ndarray,但可在 GPU 上运行以实现更快计算。
  • TorchScript。一种序列化 PyTorch 模型的方式,使其能在 C++ 等其他环境中运行,确保生产可用性。
  • 动态图计算。PyTorch 采用动态计算图,支持随时构建与修改模型,对复杂架构尤为有利。
  • 自动微分。自动微分与梯度计算简化了反向传播与神经网络训练。
  • Python 友好。PyTorch 与 Python 生态无缝集成,更加“Pythonic”,提供更易用的界面。

PyTorch 的优点

Pythonic

PyTorch 具有天然的 Python 风格,使 Python 开发者易于上手。这一优势尤为重要,因为大部分深度学习工作都在 Python 中完成。

容易学习

PyTorch 的语法极为简单直观。许多从业者认为 PyTorch 的学习曲线很平缓——有人甚至称其为最易学的深度学习工具之一。

易于调试

PyTorch 可使用 Python 的 pdb 与 ipdb 调试工具。由于 PyTorch 以实时方式创建计算图,程序员也可使用 Python IDE PyCharm 进行调试。

社区强大

尽管是较新的深度学习框架,PyTorch 仍迅速发展出一支专注的开发者社区。他们努力确保文档结构清晰、内容翔实。

数据并行

PyTorch 的数据并行能力非常出色,可将数据拆分为多个批次并分配到多块 GPU 处理。通过这种方式,PyTorch 能将大量工作负载从 CPU 转移到 GPU。

PyTorch 的缺点

缺少数据可视化

TensorFlow 的 TensorBoard 可帮助可视化训练过程,但 PyTorch 没有类似的内置工具——用户需要使用第三方工具。

生产环境需 API 服务器

没有可直接在 Web 上提供模型的框架,因此您需要使用诸如 Flask 或 Django 等第三方后端服务器。

如何选择?PyTorch vs Keras vs TensorFlow 的对比分析

TensorFlow

PyTorch

Keras

API 层级

二者兼有

(高层与低层)

低层

高层

架构

不易使用

复杂、可读性较差

简单、精炼、可读

数据集

大型数据集,高性能

大型数据集,高性能

较小数据集

调试

调试较困难

良好的调试能力

网络简单,通常不常需要调试

是否有预训练模型?

是

是

是

流行度

三者中第二受欢迎

三者中第三受欢迎

三者中最受欢迎

速度

快速,高性能

快速,高性能

较慢,性能较低

开发语言

C++、CUDA、Python

Lua

Python

选择合适的框架

“哪个框架更好?”的答案始终带有主观性,因为正如我们所见,每个框架都有其优劣。不过,以下是在选择框架时需要考虑的一些因素。

Pytorch 与 TensorFlow

  • 样板代码。PyTorch 与 TensorFlow 都通过消除大量样板代码来简化模型构建。
  • Python 风格与面向对象。PyTorch 更加“Pythonic”,并遵循面向对象编程原则,对 Python 开发者更直观。
  • 流行度。TensorFlow 年代更久且有谷歌背书,用户基数与社区更大。
  • 灵活性。PyTorch 采用动态图,灵活性更高,便于即时修改。
  • 调试与跟踪。TensorFlow 的 TensorBoard 提供强大的可视化工具,用于调试与跟踪训练过程。
  • 服务化框架。TensorFlow 拥有更成熟的模型服务体系,部署更为顺畅,而 PyTorch 的部署流程相对不如其完善。

PyTorch 与 Keras

  • 学习曲线。PyTorch 与 Keras 都较为友好,易学易用。
  • 研究 vs 开发。由于灵活与可控,PyTorch 常被研究人员青睐;而 Keras 因其简洁与即插即用特性,更受开发者欢迎。
  • 速度与调试。与 Keras 相比,PyTorch 通常更快,且具备更强的调试能力。
  • 教程与小数据集。Keras 在丰富且可复用的教程方面表现突出,处理小型数据集时尤为高效。

TensorFlow 与 Keras

  • 高层 API。TensorFlow 与 Keras 都提供用于构建与训练模型的高层 API。
  • Python 友好性。Keras 由 Python 构建,更加友好直观。
  • 大型数据集。在处理大型数据集时,TensorFlow 常因其稳健性与可扩展性而更受青睐。
  • 封装。Keras 作为对 TensorFlow 函数的封装,简化了 TensorFlow 的接口,便于使用。

结论

TensorFlow、PyTorch 与 Keras 是三大最受欢迎的深度学习框架。它们各具特色,适用于不同领域。您最终选择学习和使用哪一个,取决于具体用例以及您的技术水平与可投入的学习时间等因素。

无论您选择哪种框架,DataCamp 上都有多门实用课程可助您入门:

Kurtis Pykes

作者

Kurtis Pykes

主题