Keras 实战指南

FreeGuideOnline 最新 2026-07-15

Keras 实战指南

什么是 Keras

Keras 是一个用 Python 编写的开源高级神经网络 API,能够以 TensorFlow、JAX 或 PyTorch 作为后端运行。它以用户友好、模块化和可扩展为设计核心,让开发者能够快速将想法转化为实验结果。自 2015 年问世以来,Keras 已成为深度学习入门和工业级快速原型开发的首选工具之一,于 2017 年被正式集成进 TensorFlow 核心库(tf.keras)。

为什么选择 Keras

  • 简洁一致:统一的 API 设计,大幅降低认知负担。
  • 快速实验:几行代码即可搭建、训练并评估模型。
  • 多后端支持:可无缝切换 TensorFlow、JAX 或 PyTorch 后端。
  • 生态丰富:直接集成 TensorFlow 生态工具(如 TensorBoard、TF Serving)。
  • 生产就绪:支持 TF Lite 移动端部署、TF.js 浏览器端运行。

环境准备与安装

在开始实战前,请确保已安装 Python 3.8 或以上版本。

使用 pip 安装

pip install tensorflow

安装 TensorFlow 后,tensorflow.keras 即可使用。若只需要 Keras 3(多后端支持),可单独安装:

pip install keras

验证安装

import tensorflow as tf
print(tf.__version__)
print(tf.keras.__version__)

若无报错且版本信息正常,则环境准备完成。

Keras 核心概念速览

张量(Tensor)

张量是数据的多维数组,是深度学习的基本数据结构。一个 0 阶张量为标量,1 阶为向量,2 阶为矩阵,依此类推。

层(Layer)

层是神经网络的基本构建块,接收输入张量并输出变换后的张量。Keras 提供全连接层(Dense)、卷积层(Conv2D)、循环层(LSTM)等大量预置层。

模型(Model)

模型由多个层堆叠而成,定义了从输入到输出的计算图。Keras 提供两种主要模型构建方式:

  • Sequential 模型:线性堆叠层,适用于单输入单输出的普通堆叠网络。
  • Functional API:支持复杂拓扑结构,如多输入/多输出、共享层和残差连接。

损失函数(Loss)

衡量模型预测值与真实值之间的差距,训练过程旨在最小化该值。分类任务常用 categorical_crossentropy,回归任务常用 mean_squared_error

优化器(Optimizer)

决定如何根据损失更新网络权重。常用优化器有 AdamSGDRMSprop 等。

指标(Metrics)

用于监控训练和测试过程中的模型表现,如准确率(accuracy)、平均绝对误差等。指标不影响训练,仅用于评估。

快速开始:构建第一个分类模型

我们将使用经典的鸢尾花(Iris)数据集,构建一个简单的全连接网络完成多分类任务。

1. 加载并准备数据

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder

iris = load_iris()
X = iris.data
y = iris.target.reshape(-1, 1)

encoder = OneHotEncoder(sparse_output=False)
y_encoded = encoder.fit_transform(y)

X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.2, random_state=42)

2. 使用 Sequential API 构建模型

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(16, activation='relu', input_shape=(4,)),
    Dense(8, activation='relu'),
    Dense(3, activation='softmax')  # 三分类,使用 softmax
])

3. 编译模型

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

4. 训练模型

history = model.fit(X_train, y_train, epochs=50, batch_size=8, validation_split=0.1, verbose=1)

5. 评估模型

test_loss, test_acc = model.evaluate(X_test, y_test, verbose=0)
print(f'测试集准确率: {test_acc:.4f}')

至此,你的第一个 Keras 模型已成功运行。接下来深入更多实战场景。

Functional API 实战:多输入模型

当模型需要处理多个输入源(例如不同特征模态)时,Functional API 是更好的选择。下面演示如何构建一个接收两个独立输入的模型。

from tensorflow.keras.layers import Input, concatenate
from tensorflow.keras.models import Model

# 定义两个输入
input_A = Input(shape=(64,), name='input_A')
input_B = Input(shape=(128,), name='input_B')

# 分支处理
x1 = Dense(32, activation='relu')(input_A)
x2 = Dense(64, activation='relu')(input_B)

# 合并分支
merged = concatenate([x1, x2])
x = Dense(64, activation='relu')(merged)
output = Dense(1, activation='sigmoid')(x)

model = Model(inputs=[input_A, input_B], outputs=output)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

训练时需提供字典格式的输入:

# 示例假数据
import numpy as np
X_A = np.random.rand(1000, 64)
X_B = np.random.rand(1000, 128)
y = np.random.randint(0, 2, 1000)

model.fit({'input_A': X_A, 'input_B': X_B}, y, epochs=10, batch_size=32)

训练优化与回调(Callbacks)

回调是在训练过程中的特定时刻执行的自定义逻辑,用于保存最佳模型、动态调整学习率、提前停止等。

ModelCheckpoint:自动保存最佳模型

from tensorflow.keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint('best_model.keras', 
                             monitor='val_accuracy', 
                             save_best_only=True, 
                             mode='max')

EarlyStopping:防止过拟合

from tensorflow.keras.callbacks import EarlyStopping

early_stop = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)

ReduceLROnPlateau:学习率衰减

from tensorflow.keras.callbacks import ReduceLROnPlateau

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=3, min_lr=0.0001)

组合回调进行训练:

history = model.fit(X_train, y_train,
                    epochs=100,
                    validation_split=0.2,
                    callbacks=[checkpoint, early_stop, reduce_lr])

模型保存、加载与导出

保存完整模型(包含架构、权重、训练配置)

model.save('final_model.keras')  # 新版推荐扩展名

仅保存权重

model.save_weights('model_weights.weights.h5')

加载模型

from tensorflow.keras.models import load_model

loaded_model = load_model('final_model.keras')

加载权重到同架构模型

model.load_weights('model_weights.weights.h5')

迁移学习实战:使用预训练模型

Keras Applications 模块提供多种在 ImageNet 上预训练的模型(VGG16ResNet50EfficientNet 等),可快速用于迁移学习。

示例:微调 MobileNetV2 进行新分类任务

from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import GlobalAveragePooling2D, Dropout

# 加载预训练模型(不包含顶层全连接层)
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# 冻结基础模型权重
base_model.trainable = False

# 添加自定义分类头
inputs = tf.keras.Input(shape=(224, 224, 3))
x = base_model(inputs, training=False)  # 确保推理模式
x = GlobalAveragePooling2D()(x)
x = Dropout(0.2)(x)
outputs = Dense(10, activation='softmax')(x)  # 假设10类

model = Model(inputs, outputs)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

训练少量轮次后,可解冻部分顶层卷积层进行微调:

# 解冻基础模型的最后 20 层
base_model.trainable = True
for layer in base_model.layers[:-20]:
    layer.trainable = False

# 重新编译(微调需更低学习率)
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=1e-5),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

调试与可视化

使用 model.summary() 查看网络结构

model.summary()

TensorBoard 可视化

tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=1)
model.fit(..., callbacks=[tensorboard_callback])

在命令行启动:

tensorboard --logdir=./logs

绘制训练历史

import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='train_acc')
plt.plot(history.history['val_accuracy'], label='val_acc')
plt.title('模型准确率')
plt.legend()
plt.show()

常见问题与最佳实践

  • 过拟合怎么办? 添加 Dropout 层、使用 L1/L2 正则化、获取更多数据或数据增强、提前停止。
  • 训练不收敛? 检查学习率是否过大或过小,尝试 Adam 优化器,确认输入数据已标准化。
  • GPU 显存不足? 减小 batch_size,使用梯度累积,或减少模型复杂度。
  • 数据增强:对于图像任务,使用 ImageDataGeneratortf.keras.layers.RandomFlip 等预处理层在线增强数据。
  • 标准化输入:数值特征应缩放到 0~1 范围或标准化(均值为 0,标准差为 1),可显著加速训练。

下一步学习

  • 探索官方 Keras 指南 了解更多高级主题。
  • 阅读 TensorFlow 文档中的分布式训练部分,扩展至多 GPU 训练。
  • 尝试 Keras Tuner 进行自动超参数搜索。
  • 将模型转换为 TensorFlow Lite 部署到移动端。

通过本实战指南,你已掌握从零搭建、训练、优化到部署 Keras 模型的核心流程。立即动手尝试你自己的项目,将理论转化为实际解决方案!