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

Keras多输入模型拼接报错:InvalidArgumentError问题求助

问题定位与修复方案

核心问题

错误提示已经明确指出:拼接时除拼接维度外,所有维度必须匹配。这里sec_flatten的形状是[32, 1],而nat_flatten是[1, 936],batch维度完全不匹配,根源在于sec_input的模型定义和生成器输出的形状不对应,同时模型还有一处小bug影响层的执行逻辑。

具体问题拆解:

  1. 输入形状不匹配
    • 模型中sec_input定义为shape=(window, 1),意味着单样本输入是(32,1)的2D张量
    • 但生成器输出的X_train_sec_i是(32,)的1D张量,既缺少最后一个维度,也没有和另外两个输入一致的batch维度(另外两个输入都是(1,32,...)的带batch格式)
  2. 层连接错误
    nat_pooling_2和act_pooling_2的输入写错了,跳过了定义好的BatchNormalization层,直接用了Conv2D的输出,导致BN层未生效。

修复步骤

1. 修正生成器中sec输入的形状

把X_train_sec_i调整为和模型输入定义匹配的形状:

# 假设X_train_sec_i原本是(32,)的1D数组
X_train_sec_i = X_train_sec_i.reshape(1, window, 1)  # window=32,最终形状为(1,32,1)

2. 修复模型中的层连接错误

修改池化层的输入,让BatchNormalization层生效:

# 修正nat分支的池化层输入
nat_pooling_2 = tf.keras.layers.MaxPooling2D((2, 2), name="nat_pooling_2")(nat_batch_norm_2)

# 修正act分支的池化层输入
act_pooling_2 = tf.keras.layers.MaxPooling2D((2, 2), name="act_pooling_2")(act_batch_norm_2)

3. 验证拼接维度

修正后,三个分支经过Flatten处理后,都会变成(batch_size, feature_count)的形状(batch_size统一为1),此时concatenate层就能正常拼接所有特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:16:35