keras级联失败,形状不兼容

时间:2018-07-09 15:19:04

标签: python tensorflow neural-network keras deep-learning

这是我的代码

x_and_h = Concatenate()([x_t_emb, h_t])

这是错误:

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

我一直在尝试各种重塑操作以使形状兼容,但这些尝试均失败了:

h_t = tf.reshape(h_t, shape=tf.TensorShape([None, h_t.get_shape()[-1].value])) 
x_t = tf.reshape(x_t, shape=tf.TensorShape([1, x_t.get_shape()[-1].value]))

有人可以告诉我发生了什么事,以及如何解决该问题?

1 个答案:

答案 0 :(得分:1)

您能否提供有关定义的图层的更多详细信息?

无论如何,对于连接层,必须在同一轴上的两个张量之间至少具有一个尺寸匹配。

为简单起见,您可以轻松地看到“无”与1不匹配,而16与64不匹配。

除此之外,尝试按自己的方式重塑是错误的。最初,h_t的形状为(1,64),并且具有:

h_t = tf.reshape(h_t, shape=tf.TensorShape([None, h_t.get_shape()[-1].value]))

您正尝试将其重塑为(None,64)张量,这在概念上是错误的,因为None表示它可以是任何整数,并且通常表示批次大小。

尝试做同样的问题:

x_t = tf.reshape(x_t, shape=tf.TensorShape([1, x_t.get_shape()[-1].value]))

当您尝试将其重塑为固定形状时,其初始形状为(None,16)。

我认为您应该尝试使h_t层返回形状为(None,1,16)或(None,16)的张量,以便在第一种情况下可以展平然后串联,而仅将concatenate用于第二个。