Keras
Keras 是一个用于构建和训练神经网络的高级 Python API;从 Keras 3 开始,同一份代码可运行于 JAX、TensorFlow 或 PyTorch。
Keras 是一个用于构建和训练神经网络的开源高级 Python API。François Chollet 于 2015 年 3 月发布了 Keras,旨在让深度学习实验更容易快速编写:模型由层堆叠而成或构成计算图,compile用于设置优化器、损失函数和指标,而 fit则负责运行训练循环。Keras 后来成为 TensorFlow 的官方高级 API;2023 年 11 月发布的 Keras 3 可以在 JAX、TensorFlow 或 PyTorch 上运行相同的模型代码,具体后端在导入 Keras 时选择。Keras 简洁易读的代码让它成为教学、原型开发和 Kaggle 竞赛的常见选择,也适用于图像分类和自然语言处理等领域的生产模型。
Keras 的工作原理#
Keras 模型由 Dense、Conv2D、LSTM 和 MultiHeadAttention 等层构成,每层都持有自己的权重。Keras 提供三种组装方式:用于简单堆叠的 Sequential API、用于包含分支、共享层或多个输入的计算图的函数式 API,以及用于全面控制前向传播的子类化 keras.Model。编译后的模型通过 fit 进行训练,它会处理批处理、反向传播、指标、验证数据和用于保存检查点或提前停止的回调,然后使用 evaluate 和 predict 对新数据进行评分。下面的代码使用 Keras 自带的 MNIST 数据集训练一个小型数字分类器:
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" or "tensorflow", set before importing Keras
import keras
# MNIST handwritten digits, with pixels scaled to [0, 1]
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# Define the model as a stack of layers
model = keras.Sequential(
[
keras.Input(shape=(28, 28)),
keras.layers.Flatten(),
keras.layers.Dense(128, activation="relu"),
keras.layers.Dense(10, activation="softmax"),
]
)
# Configure training, then train and evaluate
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=2, batch_size=64, verbose=0)
loss, accuracy = model.evaluate(x_test, y_test, verbose=0)
print(f"Test accuracy: {accuracy:.3f}")经过两个轮次后,程序会输出约 0.96 的测试准确率;将 "torch" 改为 "jax" 或 "tensorflow",即可在另一个框架上运行同一模型,无需修改其他任何一行代码。
Keras 3 及其后端#
Keras 最初可运行在多个引擎上,包括 Theano、TensorFlow 和 CNTK。2019 年 9 月发布的 Keras 2.3 是最后一个支持多后端的版本;之后,开发工作转入 TensorFlow,并成为 tf.keras。Keras 3恢复了后端独立性:层和模型基于 keras.ops 编写,这是一组类似 NumPy 的操作,由各个后端分别实现;因此,使用 .keras 格式保存的模型可以在任何后端重新加载并训练。使用 PyTorch 后端时,Keras 模型同时也是一个 torch.nn.Module,可供自定义 PyTorch 训练循环使用;从 Keras 3.8 开始,纯推理的 OpenVINO 后端还能在 Intel 硬件上运行训练好的模型。
从 TensorFlow 2.16 开始,安装 TensorFlow 时会一并安装 Keras 3;仍需要 Keras 2 的代码则使用单独的 tf_keras 包。模型转换器也支持 Keras:当 Ultralytics YOLO 将 YOLO26导出为 TensorFlow SavedModel时,onnx2tf 转换器会根据其 ONNX计算图逐层重建 PyTorch 网络,将其转换为 Keras 模型后再保存。
KerasHub 中的预训练模型#
KerasHub提供热门架构的 Keras 3 实现和预训练检查点,例如用于图像的 ResNet、用于文本的 BERT,以及 Gemma 大语言模型。指定一个预设名称即可加载可用于迁移学习的模型:keras_hub.models.ImageClassifier.from_preset("resnet_50_imagenet")会返回一个在 ImageNet 上训练的分类器,你只需像上文一样调用 fit,即可通过微调让它适配新数据集。与 Keras 3 的其他部分一样,KerasHub 模型可在三个训练后端中的任意一个上运行。
Keras 与 TensorFlow 和 PyTorch 的比较#
- TensorFlow:一个拥有自身运行时、编译器和部署工具(例如 TensorFlow Serving 和 LiteRT)的完整框架。许多 TensorFlow 用户通过 Keras API 编写模型,而 TensorFlow 是运行 Keras 代码的引擎之一。
- PyTorch:一个通常由用户自行编写训练循环,或使用 PyTorch Lightning 等库的框架。Keras 通过
fit提供训练循环,也可以使用 PyTorch 作为后端,因此两者并不互斥。 - JAX:Google 提供的库,用于组合函数变换以实现微分、XLA 编译和向量化。JAX 没有内置的层或训练 API,而 Keras 是在其基础上获得这类 API 的方式之一。










