tensorflow Keras Sequential 模型

深度解析 Keras Sequential 模型

你提供的内容是 Keras 中 Sequential 模型的核心说明,下面从核心概念、代码解析、适用/不适用场景、扩展用法 四个维度展开讲解,帮你彻底理解这个基础且常用的模型结构。


1. 核心概念:Sequential 模型的本质

Sequential(序贯模型)是 Keras 中最基础的模型类型,本质是线性堆叠的层容器 ------层与层之间严格按顺序连接,每层只有一个输入张量一个输出张量,整个模型的数据流是单向的"一条线"。

这也是它和 Functional API(函数式 API)的核心区别:Sequential 只支持"线性拓扑",而 Functional API 支持任意拓扑(多输入/输出、残差连接等)。


2. 示例代码逐行解析

(1)基础导入

python 复制代码
import tensorflow as tf
import keras
from keras import layers
  • TensorFlow 2.x 中 Keras 已集成到 tf.keras,也可以直接写 from tensorflow import keras
  • layers 模块包含所有 Keras 层(如 Dense 全连接层、Conv2D 卷积层等)。

(2)Sequential 模型定义 & 等价手动调用

python 复制代码
# 方式1:Sequential 封装
model = keras.Sequential(
    [
        layers.Dense(2, activation="relu", name="layer1"),  # 全连接层,输出维度2,ReLU激活
        layers.Dense(3, activation="relu", name="layer2"),  # 输出维度3,ReLU激活
        layers.Dense(4, name="layer3"),                      # 输出维度4,无激活(默认线性激活)
    ]
)

# 测试输入:3个样本,每个样本3个特征(形状 (3,3))
x = tf.ones((3, 3))
y = model(x)  # 前向传播

# 方式2:手动逐层调用(和Sequential等价)
layer1 = layers.Dense(2, activation="relu", name="layer1")
layer2 = layers.Dense(3, activation="relu", name="layer2")
layer3 = layers.Dense(4, name="layer3")

y_manual = layer3(layer2(layer1(x)))  # 逐层传递输入
关键细节:
  • 输入 x = tf.ones((3,3))(样本数, 特征数),这里 3 个样本,每个样本 3 维特征;
  • 层的维度匹配:
    • layer1 输入维度=3 → 输出维度=2(形状 (3,2));
    • layer2 输入维度=2 → 输出维度=3(形状 (3,3));
    • layer3 输入维度=3 → 输出维度=4(形状 (3,4));
  • 最终 yy_manual 的形状都是 (3,4),且值完全一致(因为 Sequential 只是"封装了逐层调用");
  • name 参数:给层命名,方便后续查看模型结构、调试或提取层输出。

3. Sequential 模型的适用/不适用场景

✅ 适用场景

  • 简单的"层堆叠"任务:比如 MNIST 手写数字分类(输入→卷积→池化→全连接→输出)、简单的回归任务(如房价预测);
  • 快速原型开发:代码简洁,无需手动定义输入输出的连接关系。

❌ 不适用场景(必须用 Functional API)

(1)多输入/多输出模型

比如:同时输入"文本+图片"预测一个标签,或一个模型同时输出"分类结果+置信度"。

(2)层有多个输入/输出

比如:融合两个不同分支的特征(如 ResNet 的残差连接,需要把"主分支"和"捷径分支"的输出拼接)。

(3)层共享

比如:多个输入共享同一个 Embedding 层(如问答系统中,问题和答案共享词嵌入层)。

(4)非线性拓扑

比如:残差连接(ResNet)、多分支模型(Inception)、循环依赖等。


4. Sequential 模型的扩展用法

(1)用 add() 动态添加层

除了初始化时传入层列表,也可以空初始化后逐个添加:

python 复制代码
model = keras.Sequential()
model.add(layers.Dense(2, activation="relu", name="layer1", input_shape=(3,)))  # 显式指定输入维度
model.add(layers.Dense(3, activation="relu", name="layer2"))
model.add(layers.Dense(4, name="layer3"))
  • input_shape=(3,):显式指定输入维度(样本维度省略),适合提前查看模型结构(否则需先调用模型才能生成 summary)。

(2)查看模型结构

python 复制代码
model.summary()

输出如下(清晰展示每层的名称、输出形状、参数数量):

复制代码
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 layer1 (Dense)              (None, 2)                 8         # 3*2 + 2(偏置) = 8
                                                                 
 layer2 (Dense)              (None, 3)                 9         # 2*3 + 3 = 9
                                                                 
 layer3 (Dense)              (None, 4)                 16        # 3*4 + 4 = 16
                                                                 
=================================================================
Total params: 33
Trainable params: 33
Non-trainable params: 0
_________________________________________________________________

(3)编译 & 训练(完整流程)

Sequential 模型的编译/训练和其他 Keras 模型一致:

python 复制代码
# 编译:指定优化器、损失函数、评估指标
model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    loss=keras.losses.MeanSquaredError(),  # 回归任务用MSE
    metrics=["mae"]  # 平均绝对误差
)

# 构造模拟数据
X_train = tf.random.normal((1000, 3))  # 1000个样本,3维特征
y_train = tf.random.normal((1000, 4))  # 1000个标签,4维输出

# 训练
history = model.fit(
    X_train, y_train,
    batch_size=32,
    epochs=10,
    validation_split=0.2  # 20%数据作为验证集
)

5. 总结

  • Sequential 是 Keras 中最简单的模型,适合线性堆叠的层结构
  • 核心优势:代码简洁、易上手,适合入门和简单任务;
  • 核心局限:不支持复杂拓扑,遇到多输入/输出、残差连接等场景,需切换到 Functional API(函数式 API);
  • 本质:Sequential 只是"语法糖",等价于手动逐层调用层,没有额外的功能扩展。

如果需要进一步了解 Functional API 对比 Sequential 的示例,可以告诉我,我会补充相关代码!

相关推荐
一点一木1 天前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
Lee川1 天前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
weelinking1 天前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
Agent产品评测局1 天前
制造业模具管理AI系统,主流产品能力对比详解:2026年智能制造选型深度洞察
人工智能·ai·chatgpt·制造
研华科技Advantech1 天前
如何用一套实训设备,打通工业AI预测性维护技术全流程?
人工智能
Lab_AI1 天前
AI for Science: MaXFlow AI Agent+ 报告体验双升级,让AI智能体更高效易用!
人工智能·ai for science·ai agent·ai智能体
李坤1 天前
让 Codex 和 Claude 互相 Review:告别手动复制
人工智能·openai·claude
南屹川1 天前
【API设计】GraphQL实战:从REST到GraphQL的演进
人工智能
KJ_BioMed1 天前
当计算生物学遇上生成式AI:从头设计生物分子的“新范式”初探
人工智能·从头设计·生命科学·生物医药·科研干货·科晶生物
明月醉窗台1 天前
深度学习(17)YOLO训练中的超参数详解
人工智能·深度学习·yolo