Skip to content

库和框架

本章中,我们将探讨为现代深度学习开发提供动力的核心 Python 库和框架。

为了有效地构建和训练深度神经网络,开发者需要依赖专用的库(libraries)。这些库提供优化的数值计算能力、自动微分(automatic differentiation),并且通常提供高级 API(high-level API)以便高效地构建模型。虽然存在多个框架(frameworks),但在当前生态系统中,最突出的两个是 TensorFlow 和 PyTorch。

从历史上看,Theano 是一个由蒙特利尔大学开发的开创性库。它引入了使用计算图(computational graphs)来优化涉及向量和矩阵的数学表达式的概念,这对于表示神经网络和数据至关重要。Theano 允许高效计算,尤其是在 GPU 上。然而,Theano 不再积极地用于深度学习开发,社区也已基本转向 TensorFlow 和 PyTorch。

TensorFlow 由 Google 开发和维护,是一个用于数值计算和大规模机器学习的综合性开源库。它广泛应用于研究和构建生产级别的深度学习应用。

与 Theano 类似,TensorFlow 的早期版本高度依赖静态计算图。你需要首先定义整个图结构,然后在会话(session)中执行它。这种方法允许进行显著的优化。

然而,TensorFlow 2.x 将 ‘Eager Execution’(即时执行)作为默认模式引入。这使得操作可以立即被评估,提供了一种更直观、更具 Pythonic(符合 Python 编程习惯)的编程风格,类似于 NumPy 等标准 Python 库。虽然图(graphs)仍在内部用于优化和部署(通过 tf.function),但用户体验变得更加互动。

TensorFlow 提供多种抽象层次:

  • Keras API: TensorFlow 的官方高级 API(tf.keras)。它提供了一种用户友好、模块化的方式来逐层定义、训练和评估深度学习模型。Keras 代码具有很高的可读性,并简化了常见的深度学习任务。
  • 底层 TensorFlow API: 对于精细的控制,开发者可以直接使用 TensorFlow 的核心操作,这允许自定义模型架构、训练循环和优化策略。

TensorFlow 在部署场景中表现出色,提供了诸如 TensorFlow Serving、TensorFlow Lite(用于移动和嵌入式设备)以及 TensorFlow.js(用于在浏览器中运行模型)等工具。

PyTorch 主要由 Meta(Facebook 的 AI 研究实验室 - FAIR)开发,是另一个主要的开源深度学习框架,在研究社区中获得了极大的普及。

PyTorch 以其 Pythonic 的特性和易用性而闻名。它采用动态计算图(dynamic computational graphs),也称为“define-by-run”(定义即运行)。这意味着图是随着操作的执行而即时构建的,这使得调试更容易,并允许更灵活的模型架构,特别是涉及变长输入或条件控制流(在自然语言处理 - NLP 中很常见)的模型。

PyTorch 的主要特性包括:

  • 张量计算(Tensor Computation): 类似于 NumPy 数组,但具有强大的 GPU 加速能力。
  • 自动微分(Automatic Differentiation): torch.autograd 系统自动计算模型参数的梯度(gradients)。
  • 神经网络模块(Neural Network Modules): torch.nn 提供了构建神经网络的积木(层、损失函数、优化器)。
  • 生态系统(Ecosystem): PyTorch 拥有丰富的库生态系统,用于构建特定领域的应用,例如计算机视觉(torchvision)、文本(torchtext)和音频(torchaudio)。

PyTorch 在灵活性和易用性之间取得了平衡,使其成为快速原型开发和研究的首选。虽然最初在部署能力上被认为落后于 TensorFlow,但 TorchServe 和 ONNX 兼容性等工具已显著提高了其生产就绪性。

Keras 最初是一个独立的高级 API,旨在进行快速实验,运行在 Theano、TensorFlow 或 CNTK 等后端之上。其极简、模块化的设计允许通过堆叠层来构建复杂的模型。

自 TensorFlow 2.x 发布以来,Keras 已成为直接集成在 TensorFlow (tf.keras) 中的官方高级 API。虽然仍然可以找到独立的 Keras 安装,但现在标准做法是使用 TensorFlow 捆绑的实现。

Keras 的核心优势在于其简洁性和易用性,使得开发者只需几行代码即可定义、训练和评估模型,抽象掉了后端框架的底层复杂性。

TensorFlow(结合 Keras)和 PyTorch 都是强大且受到良好支持的框架。选择通常取决于具体的需要和偏好:

  • TensorFlow/Keras: 由于其强大的生态系统(Serving、Lite、JS)、可扩展性以及 Keras 对于标准任务的简洁性,常被优先选择用于生产部署。
  • PyTorch: 因其灵活性、Pythonic 特性、动态图和易于调试而在研究领域受到青睐。其生态系统在生产用例方面也在快速发展。

熟悉其中任何一个框架对于深度学习工程师都非常有价值。许多概念是可迁移的,理解深度学习的核心原理比掌握某个单一库更重要。

如需进一步探索,请参考以下资源: