神经网络框架
正如我们已经学习到的,为了高效地训练神经网络,我们需要做到以下两点:
神经网络框架
正如我们已经学习到的,为了高效地训练神经网络,我们需要做到以下两点:
- 操作张量,例如进行乘法、加法,以及计算一些函数如 sigmoid 或 softmax。
- 计算所有表达式的梯度,以便执行梯度下降优化。
课前测验
虽然 numpy 库可以完成第一部分,但我们还需要某种机制来计算梯度。在我们之前开发的框架中,我们必须手动在 backward 方法中编写所有的导数函数来实现反向传播。理想情况下,一个框架应该能够让我们计算任何表达式的梯度。
另一个重要的事情是能够在 GPU 或其他专用计算单元(如 TPU)上进行计算。深度神经网络的训练需要大量的计算,因此能够在 GPU 上并行化这些计算非常重要。
✅ “并行化”一词指的是将计算分配到多个设备上。
目前最流行的两个神经网络框架是:TensorFlow 和 PyTorch。它们都提供了一个低级 API,用于在 CPU 和 GPU 上操作张量。在低级 API 之上,还有高级 API,分别是 Keras 和 PyTorch Lightning。
| 低级 API | TensorFlow | PyTorch |
|---|---|---|
| 高级 API | Keras | PyTorch Lightning |
低级 API 允许你构建所谓的计算图。这个图定义了如何通过给定的输入参数计算输出(通常是损失函数),并且可以在 GPU 上运行计算(如果可用)。这些框架提供了对计算图进行微分以计算梯度的功能,这些梯度可以用于优化模型参数。
高级 API 将神经网络视为层的序列,使得构建大多数神经网络变得更加简单。训练模型通常只需要准备数据,然后调用一个 fit 函数即可完成。
高级 API 允许你快速构建典型的神经网络,而无需担心许多细节。同时,低级 API 提供了对训练过程的更多控制,因此在研究新型神经网络架构时经常使用。
需要注意的是,你可以同时使用这两种 API。例如,你可以使用低级 API 开发自己的网络层架构,然后将其嵌入到使用高级 API 构建和训练的更大网络中。或者,你可以使用高级 API 将网络定义为层的序列,然后使用自己的低级训练循环进行优化。这两种 API 使用相同的基本概念,并且设计为能够很好地协同工作。
学习
在本课程中,我们为 PyTorch 和 TensorFlow 提供了大部分内容。你可以选择自己喜欢的框架,只学习对应的笔记本。如果你不确定选择哪个框架,可以在网上查阅一些关于 PyTorch vs. TensorFlow 的讨论。你也可以同时了解这两个框架以获得更好的理解。
在可能的情况下,我们会为了简化使用高级 API。然而,我们认为从基础上理解神经网络的工作原理非常重要,因此在开始时我们会从低级 API 和张量操作入手。不过,如果你想快速入门,不想花太多时间学习这些细节,可以直接跳到高级 API 的笔记本。
✍️ 练习:框架
通过以下笔记本继续学习:
| 低级 API |
|---|


