Skip to content

PyTorch - 介绍

PyTorch 是一个流行的开源 Python 机器学习库,以其灵活性、易用性和对 GPU 加速的强大支持而闻名。它最初主要由 Facebook 的人工智能研究院 (FAIR) 开发,现在由 Linux 基金会旗下的 PyTorch 基金会管理。PyTorch 被广泛应用于学术界和工业界,用于计算机视觉 (computer vision)、自然语言处理 (NLP) 和深度学习研究等应用。

它提供两个高级功能:具有强大 GPU 加速的 Tensor 计算(类似于 NumPy),以及基于“磁带”式自动微分系统构建的深度神经网络框架。

PyTorch 强调 Python 优先的方法,这让 Python 开发者感到非常自然。它的命令式编程风格允许动态构建模型并更容易进行调试。

PyTorch 的主要特性包括:

Pythonic 和直观的 API:PyTorch 提供了一个与 Python 及其科学计算栈(如 NumPy、SciPy)无缝集成的 API。这使得它相对容易学习和使用,特别是对于那些已经熟悉 Python 的人。

动态计算图(即时执行):PyTorch 默认使用动态图。这意味着表示计算的图是在操作执行时动态定义的。这为结构依赖于输入数据的模型提供了极大的灵活性,并且使用标准 Python 调试器进行调试更加直接。

GPU 加速:PyTorch Tensor 可以使用 .cuda() 或 .to('cuda') 轻松移动到 NVIDIA GPU 上,从而大大加快计算速度,这对于训练大型深度学习模型至关重要。

丰富的生态系统和库:PyTorch 拥有一个活跃的社区和不断发展的工具和库生态系统,例如用于计算机视觉的 TorchVision、用于 NLP 的 TorchText 和用于音频处理的 TorchAudio。许多最先进的研究项目都在 PyTorch 中发布其代码。

可扩展性:用户可以通过继承 torch.nn.Module 类并在 Python 中实现其逻辑来轻松定义自定义层、损失函数和模型。

PyTorch 有几个核心抽象:

  • Tensor:多维数组,类似于 NumPy 数组,但具有 GPU 加速和自动微分功能。如果 Tensor 的 requires_grad 属性设置为 True,PyTorch 会跟踪其上的操作以进行梯度计算。
  • torch.nn.Module:所有神经网络模块(例如,层或整个模型)的基类。模块可以包含其他模块、可学习参数(权重),并且必须定义一个 forward() 方法来指定计算过程。
  • torch.autograd:PyTorch 的自动微分引擎,为神经网络训练提供支持。它记录操作以构建计算图,然后使用该图通过反向传播计算梯度。

使用 PyTorch 的主要优势包括:

  • 由于其命令式、“运行时定义”的特性,易于调试。
  • Python 优先的集成,让 Python 开发者感到自然。
  • 模型设计的灵活性,允许复杂和动态的架构。
  • 在研究社区中获得大力支持,因此许多前沿模型都在 PyTorch 中可用。
  • 在 torch.nn 和 torch.optim 中提供了丰富的预构建层、损失函数和优化算法集合。
  • 使用 PyTorch Mobile 简化了到移动设备和边缘设备的部署,使用 TorchServe 简化了到生产服务器的部署。

PyTorch 和 TensorFlow 都是强大且流行的深度学习框架。以下是对某些方面的简要比较:

方面PyTorchTensorFlow
主要开发者Meta AI (FAIR), PyTorch 基金会Google Brain
图定义动态计算图(默认即时执行)。高度灵活。TensorFlow 2.x 也默认使用即时执行。TensorFlow 1.x 使用静态图。可以使用 tf.function 将 Python 代码编译成静态图以提升性能。
API 风格通常被认为更具“Pythonic”风格和面向对象特性。使用标准 Python 工具进行调试可能更直接。在 TF 2.x 中,API 已变得更以 Keras 为中心且更易于 Python 开发者使用。提供多层 API(Keras,较低层级的 TF)。
社区与采纳情况在研究社区中表现强劲,在工业界迅速发展。历来在工业界和生产环境中表现强劲,也广泛应用于研究。
部署PyTorch Mobile 用于设备端,TorchServe 用于服务端。生态系统正在迅速成熟。TensorFlow Lite 用于设备端,TensorFlow Serving 用于服务端。在生产部署方面被认为非常成熟。
生态系统TorchVision, TorchText, TorchAudio 是主要的库。第三方工具数量不断增长。包含 TensorBoard 用于可视化、TensorFlow Hub 用于预训练模型以及许多专业库的广泛生态系统。

选择 PyTorch 还是 TensorFlow 通常取决于具体的项目需求、团队熟悉度和个人偏好。两者都是能够构建最先进模型的优秀框架。