【问题标题】:Keras - Trying to concatenate two inputsKeras - 尝试连接两个输入
【发布时间】:2026-01-25 10:05:01
【问题描述】:

我的模型有两个输入,两个都是张量(一个是输入层,另一个是嵌入层)。我使用的是用于张量的concatenate,而不是用于层的Concatenate。我以前做过这个没有问题,但我目前使用的是不同的数据集,其中输入具有不同的形状。我正在尝试做的是将图像与嵌入矩阵连接起来并将其传递给densenet121:

-----------
|embedding|
|         |
-----------
|  image  |
-----------

这是它们的原始形状:

Image: (?, 224, 224, 1)
embedding: (?, 200, 224)

显然,它们具有不同的大小(一个是正方形,一个是矩形)并且具有不同的暗度数。所以我尝试连接如下:

merged = Concatenate([text_embedding, squeeze(image_input, axis=-1)], axis=1, name='merged')

挤压背后的原因是因为它的形状是 (?, 224, 224, 1) 并且嵌入如上图所示。我怀疑它可能必须是两件事之一:

  1. 连接轴错误
  2. concat 函数不能对这些输入进行操作(因为它们可能是层,必须使用 Concat 吗?)
  3. 也许两个形状都必须有 4 个暗度?

我收到以下错误:

默认

ValueError: Shape must be rank 4 but is rank 3 for 'sequential_11/densenet121/zero_padding2d_21/Pad' (op: 'Pad') with input shapes: [?,424,224], [4,2].

for 1) 我尝试将 concat 轴设置为 2 并得到:

ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 200, 224, 1), (None, 224, 224, 1)]

对于 2)concat 更改为 Concat TypeError: __init__() got multiple values for argument 'axis'

对于 3) 我试过了:expand_dims(text_embedding, axis=-1) 得到了:AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

知道如何解决这个问题吗?

【问题讨论】:

    标签: python keras tensor


    【解决方案1】:

    好的,找到我的答案了:

    expandedText = Lambda(lambda x: expand_dims(x, axis=-1))
    merged = concatenate([expandedText(text_embedding), image_input], axis=1, name='merged')
    

    显然你必须先把它变成一个层,然后才能制作找到here的图表。

    【讨论】:

      最近更新 更多