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

如何在Keras中垂直堆叠已训练模型?两模型输出1与输入2形状一致

如何在Keras中垂直堆叠两个训练好的函数式API模型

没问题!你说的“垂直堆叠”其实就是把两个模型串联起来——让模型1的输出直接作为模型2的输入,形成一个端到端的新模型。既然你已经确认模型1的输出形状和模型2的输入形状完全匹配,这个操作在Keras函数式API里非常简单,具体步骤如下:

步骤1:准备好你的训练模型

假设你已经加载了两个训练完成的模型,分别命名为model1和model2。如果是从文件加载的(比如用load_model()),确保加载过程正常(不需要额外设置compile=False,除非你不想保留原模型的编译配置)。

步骤2:用函数式API串联模型

直接利用Keras的函数式API,把模型1的输出接入模型2的输入:

# 如果是原生Keras
from keras.models import Model
# 如果是TensorFlow Keras(tf.keras)
# from tensorflow.keras.models import Model

# 获取模型1的输入层作为新模型的输入
input_tensor = model1.input

# 让模型1处理输入,得到输出后传入模型2
x = model1.output
x = model2(x)

# 构建最终的串联模型
combined_model = Model(inputs=input_tensor, outputs=x)

步骤3:验证与使用

  • 你可以打印新模型的结构,确认两个模型已经成功串联:
combined_model.summary()
  • 如果需要继续训练这个新模型,可以重新编译它(根据你的任务需求调整优化器、损失函数等):
combined_model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',  # 根据你的任务替换成对应损失
    metrics=['accuracy']
)
  • 要是只用于推理,直接调用combined_model.predict()就可以了。

注意事项

  • 串联时,Keras会自动复用两个模型已训练好的权重,不用担心权重丢失。
  • 如果模型2原本有自己的输入层,调用model2(x)时会自动忽略原输入层,改用传入的x作为输入,完全符合我们的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:24