Python (TensorFlow) - 连接不同维度的张量对象

问题描述 投票:1回答:1

我有一个关于在Tensorflow中连接两个Tensor对象的问题。正如你在下面的代码中所看到的,我想连接a2和b1。a2的形状是(None, 1, 512),b1的形状是(None, 34, 512)。我想沿着第二个参数将它们连接起来,因此 axis=1。

a_input = Input(shape=(20480,))
b_input = Input(shape=(34,))

a1 = Dense(embedding_dim)(image_input) #N: Activation specification needed here?  # shape = (None, 512)
a2 = K.expand_dims(image_emb, axis=1) # shape = (None, 1, 512)
b1 = Embedding(num_words, embedding_dim, mask_zero=True)(caption_input) # shape = (None, 34, 512)

c = concatenate((a2, b1), axis=1)

但是,如果我执行上面的代码,会得到以下错误信息

ValueError: Dimension 0 in both shapes must be equal, but are 512 and 1. Shapes are [512] and [1]. for '{{node concatenate_28/concat_1}} = ConcatV2[N=2, T=DT_BOOL, Tidx=DT_INT32](concatenate_28/ones_like, concatenate_28/ExpandDims, concatenate_28/concat_1/axis)' with input shapes: [?,1,512], [?,34,1], [] and with computed input tensors: input[2] = <1>.

我这是做错了什么?怎样才能解决这个问题呢?

期待大家给我一些建议!

python tensorflow concatenation tensor
1个回答
0
投票

在这里提供解决方案(答案部分),尽管它存在于评论部分,以利于社区。

ValueError: Dimension 0 in both shapes must be equal, but are 512 and 1. Shapes are [512] and [1]. for '{{node concatenate_28/concat_1}} = ConcatV2[N=2, T=DT_BOOL, Tidx=DT_INT32](concatenate_28/ones_like, concatenate_28/ExpandDims, concatenate_28/concat_1/axis)' with input shapes: [?,1,512], [?,34,1], [] and with computed input tensors: input[2] = <1>.

这个错误在修改代码时得到了解决,从

b1 = Embedding(num_words, embedding_dim, mask_zero=True)(caption_input) 

b1 = Embedding(num_words, embedding_dim, mask_zero=False)(caption_input) 

在下面完成更新的代码

a_input = Input(shape=(20480,))
b_input = Input(shape=(34,))

a1 = Dense(embedding_dim)(image_input) #N: Activation specification needed here?  # shape = (None, 512)
a2 = K.expand_dims(image_emb, axis=1) # shape = (None, 1, 512)
b1 = Embedding(num_words, embedding_dim, mask_zero=False)(caption_input) # shape = (None, 34, 512)

c = concatenate((a2, b1), axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.