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

卷积后添加Input Layer导致Keras计算图断开问题求助

问题原因与修复方案

核心错误原因

代码中定义了两个输入层input_layer和input_layer_2,但构建Model时仅传入input_layer作为输入,而input_layer_2在网络中间的拼接层中被使用,导致模型计算图断开——Keras无法找到input_layer_2的输入来源。此外还有一行冗余代码:x = concatenate([d1, input_layer_2])的结果未被后续层使用,属于无效计算。

修复后的完整代码

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Embedding
from tensorflow.keras.layers import Dense,Input,Conv1D,MaxPool1D,Activation,Dropout,Flatten
from tensorflow.keras.models import Model
from tensorflow.keras import applications
from tensorflow.keras.layers import concatenate
import tensorflow as tf
tf.keras.backend.clear_session()
from keras.regularizers import l2

from tensorflow.keras import backend as K

# 需提前定义的参数示例,根据实际场景替换
max_length = 1000
vocab_size = 10000
embedding_matrix = tf.random.normal((vocab_size, 100))

input_layer = Input(shape=(max_length,) )
input_layer_2 = Input(shape=(7,) )
x = Embedding(vocab_size, output_dim=100,weights=[embedding_matrix],input_length=max_length, trainable=False)(input_layer)
c1 = Conv1D(filters=13, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_normal")(x)
c2 = Conv1D(filters=13, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_normal")(x)
c3 = Conv1D(filters=13, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_normal")(x)
x  = concatenate([c1, c2, c3], axis=1)
m1 = MaxPool1D(pool_size=2)(x)
c1 = Conv1D(filters=12, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_uniform")(m1)
c2 = Conv1D(filters=12, kernel_size=2, padding='same', activation='relu',kernel_initializer="he_uniform")(m1)
c3 = Conv1D(filters=12, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_uniform")(m1)
x  = concatenate([c1, c2, c3], axis=1)
m2 = MaxPool1D(pool_size=2)(x)
c4 = Conv1D(filters=15, kernel_size=2, padding='same', activation='relu',kernel_initializer="glorot_uniform")(m2)
flat1 = Flatten()(c4)

# 合并卷积分支与第二个输入
x  = concatenate([flat1, input_layer_2], axis=1)
d1 = Dense(64, activation="relu",kernel_initializer="glorot_uniform")(x)
d1 = Dense(32, activation="relu",kernel_initializer="glorot_uniform")(d1)
# 移除未使用的冗余拼接操作
out = Dense(3, activation="softmax",kernel_initializer="glorot_uniform")(d1)

# 关键修改:将两个输入层都传入模型的inputs参数
model = Model(inputs=[input_layer, input_layer_2], outputs=out)
print(model.summary())

关键修改点

  1. 模型输入配置:将Model的inputs参数从input_layer改为[input_layer, input_layer_2],让Keras识别到两个输入均属于模型的计算图节点。
  2. 清理冗余代码:删除未被后续层使用的x = concatenate([d1, input_layer_2])行,减少无效计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:09:26