Python 如何在keras中连接不同的张量形状

Python 如何在keras中连接不同的张量形状,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我试图在keras中实现注意机制,我的上下文向量形状是shape=(?,1024) 我的解码器的嵌入形状是shape=(?,381024) 上下文向量和解码器嵌入都是张量,我如何连接它们 def B_Attention_layer(state_h,state_c,encoder_outputs): d0 = tf.keras.layers.Dense(1024,name='dense_layer_1') d1 = tf.keras.layers.Dense(1024,name='den

我试图在keras中实现注意机制,我的上下文向量形状是shape=(?,1024)
我的解码器的嵌入形状是shape=(?,381024)
上下文向量和解码器嵌入都是张量,我如何连接它们

def B_Attention_layer(state_h,state_c,encoder_outputs):

  d0 = tf.keras.layers.Dense(1024,name='dense_layer_1')
  d1 = tf.keras.layers.Dense(1024,name='dense_layer_2')
  d2 = tf.keras.layers.Dense(1024,name='dense_layer_3')
  #below are the hidden states of LSTM 
  # my encoder output shape is shape=(?, 38, 1024)
  #my each hidden state shape is i.e.., state_c shape=(?, 1024) ,state_h shape=(?, 1024)
  hidden_with_time_axis_1 = tf.keras.backend.expand_dims(state_h, 1)
  hidden_with_time_axis_2 = tf.keras.backend.expand_dims(state_c, 1)
  score = d0(tf.keras.activations.tanh(encoder_outputs) + d1(hidden_with_time_axis_1) +  d2(hidden_with_time_axis_2))
  attention_weights = tf.keras.activations.softmax(score, axis=1)
  context_vector = attention_weights * encoder_outputs
  context_vector = tf.keras.backend.sum(context_vector, axis=1)
  input_to_decoder = tf.keras.layers.Concatenate(axis=-1)([context_vector,decoder_embedding])

  return input_to_decoder , attention_weights
当我尝试这样做时,我会得到一个如下所示的连接错误

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

在本例中,连接轴是1,因为您有形状
(无,1,1024)
(无,38,1024)

例如:

I1=tf.keras.Input(shape=(1144))
# 
I2=tf.keras.Input(shape=(381024))
# 
concated=tf.keras.layers.Concatenate(轴=1)([I1,I2])
#输出:

此外,由于连接轴为1,因此错误消息中还指出,其余维度必须相同。

在连接层中尝试
axis=1
I1 = tf.keras.Input(shape=(1, 1024))
# <tf.Tensor 'input_6:0' shape=(?, 1, 1024) dtype=float32>
I2 = tf.keras.Input(shape=(38, 1024))
# <tf.Tensor 'input_7:0' shape=(?, 38, 1024) dtype=float32>

concated = tf.keras.layers.Concatenate(axis=1)([I1,I2])
# output: <tf.Tensor 'concatenate_4/concat:0' shape=(?, 39, 1024) dtype=float32>