TensorFlow 使用 tf.GradientTape 为张量操作和自动微分提供了强大的工具。虽然可以直接使用这些基本操作构建复杂的模型,但手动跟踪变量、梯度和计算图会变得非常复杂且容易出错,尤其对于深度网络来说。这就是 Keras 的作用所在。Keras 是一个用于构建和训练神经网络的高级 API,它与 TensorFlow 2.x 紧密结合。可以将 Keras 视为一个用户友好的界面,它位于 TensorFlow 核心功能之上。与直接使用底层 TensorFlow 操作相比,它让你能以少得多的代码和更低的思维负担来定义、训练和评估模型。为什么要用 Keras?Keras 的主要目标是让深度学习的开发更快速、更简单。它通过以下几个设计原则做到了这一点:用户友好性: Keras API 设计直观且一致。常见的神经网络组件,如层、激活函数、优化器和损失函数,都作为预构建、可配置的模块随时可用。这减少了你需要编写的样板代码量。模块化: Keras 模型通常通过连接可配置的构建块(如层)来构建。这些组件可以轻松组合和复用,促进了有条理的模型开发。可扩展性: 尽管 Keras 提供了许多标准组件,它也让创建用于研究或特殊应用的自定义层、损失函数和指标变得简单。我们将在本章稍后部分提到这一点。紧密的 TensorFlow 集成: 由于 Keras 是 TensorFlow 官方的高级 API,它能与其他 TensorFlow 功能(如用于高效数据管道的 tf.data 和用于图优化的 tf.function)很好地配合使用。在需要时,你可以轻松地将 Keras 组件与底层 TensorFlow 代码混合使用。Keras:不仅仅是一个封装层理解这一点很重要:Keras 不仅仅是 TensorFlow 的一个封装层;对于大多数用户而言,它就是在 TensorFlow 中构建模型的标准方式。当你使用 tensorflow.keras 时,你就是在使用 TensorFlow。Keras 提供了抽象(如 Layer、Model、Sequential),这些抽象将你的模型定义转换为底层的 TensorFlow 计算图和操作。可以这样看待它们的关系:digraph G { rankdir=TB; node [shape=box, style=filled, color="#ced4da", fillcolor="#e9ecef", fontname="Arial"]; edge [fontname="Arial", color="#495057"]; User [label="你的模型代码\n(例如,定义层)", fillcolor="#a5d8ff"]; Keras [label="Keras API\n(tf.keras.Model, tf.keras.layers, ...)", fillcolor="#bac8ff"]; TFCore [label="TensorFlow 核心\n(tf.Tensor, tf.Variable, tf.GradientTape, tf.function, ...)", fillcolor="#d0bfff"]; Hardware [label="硬件执行\n(CPU / GPU / TPU)", fillcolor="#eebefa"]; User -> Keras [label="定义模型架构"]; Keras -> TFCore [label="转换为 TF 操作"]; TFCore -> Hardware [label="执行计算"]; }Keras 在 TensorFlow 的核心操作之上提供了一个高级抽象层,简化了模型开发。通过使用 Keras,你可以充分发挥 TensorFlow 的性能优化(如通过 tf.function 进行图执行)和硬件加速能力(CPU、GPU、TPU),在大多数情况下无需直接管理这些细节。在接下来的部分中,我们将了解 Keras 定义模型的主要方式:即用于简单线性层堆叠的 Sequential API,以及用于构建具有多个输入、输出或共享层的更复杂架构的 Functional API。