【发布时间】: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) 并且嵌入如上图所示。我怀疑它可能必须是两件事之一:
- 连接轴错误
- concat 函数不能对这些输入进行操作(因为它们可能是层,必须使用 Concat 吗?)
- 也许两个形状都必须有 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'
知道如何解决这个问题吗?
【问题讨论】: