You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Keras(TensorFlow后端)构建两阶段组合神经网络模型?

这种串联式的模型结构用Keras的函数式API来实现简直完美,它能灵活处理多输入、多输出以及模型嵌套的场景,完全适配你要的x,y → M1 → z再结合a1~an输入M2的流程。我帮你梳理清楚实现步骤,再给你写个可直接复用的代码示例:

核心实现思路
  • 第一步:单独定义M1模型的输入(x和y)与网络结构,得到中间输出z;
  • 第二步:定义M2的输入,包含M1的输出z,以及剩余的特征a1~an;
  • 第三步:将两部分拼接成完整的端到端模型,或者也可以先单独训练M1再复用其权重训练M2,两种方式都支持。
完整代码示例

首先导入必要的库:

import tensorflow as tf
from tensorflow.keras import layers, Model

接下来构建模型:

# ---------------------- 定义M1模型部分 ----------------------
# 根据你的实际特征维度修改shape参数,比如x是一维特征就写(1,),如果是图像就写(28,28,1)
input_x = layers.Input(shape=(1,), name="feature_x")
input_y = layers.Input(shape=(1,), name="feature_y")

# 把x和y拼接后输入M1的网络层
m1_concat = layers.concatenate([input_x, input_y])
# 这里可以根据任务需求设计M1的深度结构,比如增加更多Dense层或者CNN/RNN层
z = layers.Dense(32, activation="relu")(m1_concat)
z = layers.Dense(16, activation="relu")(z)
z = layers.Dense(8, activation="relu", name="intermediate_z")(z)  # M1的输出z

# ---------------------- 定义M2模型部分 ----------------------
# 定义a1~an的输入层,假设你的剩余特征是n维向量,这里用5做示例,实际替换成你的n值
input_a = layers.Input(shape=(5,), name="features_a")

# 把M1的输出z和a特征拼接后输入M2
m2_concat = layers.concatenate([z, input_a])
# 同样,根据最终任务(分类/回归等)设计M2的结构
final_output = layers.Dense(64, activation="relu")(m2_concat)
final_output = layers.Dense(32, activation="relu")(final_output)
# 假设最终是二分类任务,用sigmoid激活;如果是回归就去掉激活或者用linear
final_output = layers.Dense(1, activation="sigmoid", name="final_prediction")(final_output)

# ---------------------- 构建完整端到端模型 ----------------------
full_model = Model(
    inputs=[input_x, input_y, input_a],
    outputs=final_output
)

# 编译模型,根据任务选择损失函数和优化器
full_model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

# 查看模型结构,确认各层连接是否正确
full_model.summary()
额外说明
  1. 单独训练M1的方式:如果你想先训练M1再训练M2,可以单独把M1提取出来:

    m1_model = Model(inputs=[input_x, input_y], outputs=z)
    # 先训练m1_model,比如用x和y对应某个标签训练
    # m1_model.fit([x_train, y_train], z_true_train, epochs=10)
    

    之后构建M2时,直接复用M1的输出:z = m1_model([input_x, input_y])即可。

  2. 训练数据的输入格式:训练完整模型时,输入要对应模型的输入列表,比如:

    # 假设你的训练数据是x_train, y_train, a_train,标签是y_true_train
    full_model.fit(
        [x_train, y_train, a_train],
        y_true_train,
        epochs=15,
        batch_size=32,
        validation_split=0.2
    )
    
  3. 灵活调整网络结构:不管你的x、y是数值特征还是图像/序列特征,只需要修改Input层的shape参数,再对应调整M1的网络层(比如用CNN处理图像,RNN处理序列)就行。

内容的提问来源于stack exchange,提问作者M_T_JABER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:41:19