Keras 核心概念
FreeGuideOnline
最新
2026-07-15
python import keras tensor = keras.ops.ones((2, 3, 4)) # 创建一个形状为 (2,3,4) 的全1张量 print(tensor.shape) # (2, 3, 4)
> **提示**:在构建模型之前,务必理解输入数据的形状,因为模型的第一层需要明确定义 `input_shape`。
---
## 层的抽象:Layer
**层(Layer)** 是 Keras 的基本构建块,它接收一个或多个张量作为输入,经过某种计算后输出一个或多个张量。层具有可学习的权重(参数),这些权重通过训练自动更新。
### 常用层类型
- **全连接层** `Dense`:`output = activation(dot(input, kernel) + bias)`
- **卷积层** `Conv2D`:提取空间特征。
- **循环层** `LSTM`、`GRU`:处理序列数据,具有内部状态。
- **归一化层** `BatchNormalization`:加速训练、稳定梯度。
- **Dropout 层** `Dropout`:随机丢弃输入单元,用于正则化。
### 定义层的方式
所有层都是 `keras.layers.Layer` 的子类。你可以直接调用现有层,或自定义层。
```python
from keras import layers
# 一个全连接层,64个单元,输入形状为(32,)(特征维度32)
dense_layer = layers.Dense(64, activation='relu', input_shape=(32,))
层可以像函数一样调用:output = dense_layer(input_tensor)。
模型:层的组合
Keras 提供了两种主要的模型构建方式:Sequential 模型(简单层堆叠)和函数式 API(灵活的有向无环图)。
Sequential 模型
适用于线性堆叠的普通前馈网络。
from keras import models
from keras import layers
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(784,)),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
函数式 API
适用于多输入、多输出、共享层、残差连接等复杂拓扑。
inputs = keras.Input(shape=(784,))
x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs)
函数式 API 的核心是将层化为可调用对象,像搭积木一样连接张量。
编译:配置学习过程
模型在训练之前必须通过 compile() 进行配置。需要指定三个核心要素:
- 优化器(Optimizer):决定如何更新权重,如
SGD、Adam。 - 损失函数(Loss):衡量模型预测与真实目标之间的差距。
- 指标(Metrics):用于监控训练和测试,如
accuracy。
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
自定义配置
你可以灵活传入对象,微调超参数:
from keras import optimizers, losses, metrics
model.compile(
optimizer=optimizers.Adam(learning_rate=0.001),
loss=losses.SparseCategoricalCrossentropy(),
metrics=[metrics.SparseCategoricalAccuracy()]
)
损失函数和指标名称后面加
Sparse表示标签是整数形式,而非独热编码。
训练:fit() 方法
编译完成后,使用 fit() 方法将模型与数据进行拟合。
history = model.fit(
x_train, y_train,
batch_size=32,
epochs=10,
validation_split=0.2
)
关键参数
batch_size:每次梯度更新使用的样本数,影响训练速度和稳定性。epochs:整个训练集被遍历的次数。validation_data或validation_split:用于在每个 epoch 后评估验证集性能,防止过拟合。callbacks:强大的扩展机制,如EarlyStopping、ModelCheckpoint、TensorBoard等。
callbacks = [
keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True),
keras.callbacks.ModelCheckpoint('best_model.keras', save_best_only=True)
]
model.fit(x_train, y_train, epochs=50, callbacks=callbacks, validation_data=(x_val, y_val))
fit() 返回一个 History 对象,记录每个 epoch 的损失和指标值,可用于绘制学习曲线。
评估与预测
训练完成的模型可以使用 evaluate() 在测试集上获取损失和指标值。
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc:.3f}")
使用 predict() 生成新数据的预测输出。
predictions = model.predict(x_new)
# predictions 是一个 NumPy 数组,形状为 (样本数, 输出单元数)
对于分类任务,predict 输出概率分布,可以通过 np.argmax(predictions, axis=1) 获取类别标签。
保存和加载模型
Keras 支持保存完整模型(包括架构、权重和训练配置),文件格式推荐 .keras(新格式)或 .h5。
# 保存
model.save('my_model.keras')
# 加载
loaded_model = keras.models.load_model('my_model.keras')
如果你只关心权重,可以使用 model.save_weights('weights.keras') 和 model.load_weights('weights.keras')。
核心概念总结图
[数据张量] → [层 (Layer)] → [模型 (Model)]
↕ 权重
[编译 (compile)]
· 优化器 (optimizer)
· 损失函数 (loss)
· 指标 (metrics)
↓
[训练 (fit)] → 更新权重
↓
[评估 (evaluate)] / [预测 (predict)]