Keras - 试图连接两个输入

Keras - Trying to concatenate two inputs

我的模型有两个输入,都是张量(一个是输入层,另一个是嵌入层)。我使用的是用于张量的 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].

对于 1) 我尝试将连接轴设置为 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'

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

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

好的,找到我的答案:

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

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