Python 如何使keras层接受不同形状的张量

Python 如何使keras层接受不同形状的张量,python,tensorflow,keras,lstm,Python,Tensorflow,Keras,Lstm,如何编写接受多个输入的keras层?例如,我想建立一个关注度来缩放一个LSTM层,以一种LSTM层关注的方式,并将“上一次的特征”(批量大小、步长、特征大小)作为参数?而且必须在层内进行,而不是在层外 例如,我想要类似于“the_layer”的东西: x = Input(shape=(max_sentence_length)) word_embeddings = Embedding(...)(x) attention = attention()(previous_feature) lstm_sc

如何编写接受多个输入的keras?例如,我想建立一个关注度来缩放一个LSTM层,以一种LSTM层关注的方式,并将“上一次的特征”(批量大小、步长、特征大小)作为参数?而且必须在层内进行,而不是在层外

例如,我想要类似于“the_layer”的东西:

x = Input(shape=(max_sentence_length))
word_embeddings = Embedding(...)(x)
attention = attention()(previous_feature)
lstm_scaled_with_attention = the_layer(return_sequence=True)(word_embeddings, attention)
到目前为止,我已经尝试向LSTM层的call()函数添加一个参数,但LSTM派生自layer类,该类表示它只需要一个输入。这可能不是解决问题的办法

我还尝试了连接([word_embeddings,attention]),然后馈送,但张量必须在形状上或某种程度上对齐。我不能让他们同时进去。有什么办法吗

----------------------------另一个-01-----------------------------------------

为了弄清楚如果你把它当作一个来自_Merge的图层来使用会发生什么,我也尝试了这个

x = Input(shape=(max_sentence_length))
word_embeddings = Embedding(...)(x)
attention = attention()(previous_feature)
lstm_scaled_with_attention = Bidirectional(LSTM(hidden_units, return_sequence=True))([word_embeddings, attention])
在这种情况下,“注意”被解释为LSTM()的第二个参数,它是LSTM.调用函数的初始状态。声明如下:

def __call__(self, inputs, initial_state=None, constants=None, **kwargs):
错误呢

ValueError: When passing `initial_state` to a Bidirectional RNN, the state should be a list containing the states of the underlying RNNs. Found: [<tf.Tensor 'input_2:0' shape=(None, 72) dtype=float32>]
ValueError:将“初始状态”传递给双向RNN时,状态应为包含基础RNN状态的列表。找到:[]

实际上,我认为可以在这里添加参数,因为传递一个列表意味着传递多个参数,我猜。

除非层没有可训练的参数,否则接受两个输入的层没有意义,层在训练期间不断更新参数,你唯一能做的就是连接输入,因为它们不是同一性质的,所以在任何情况下都不会有用。我想改变某些层的行为,当它们有其他值被“屏蔽”时。你可以把注意力想象成一种面具。这不需要引起注意,我只是举个例子。层可以接受多个输入,实际问题是什么?例如,以获取输入列表的合并层(添加、连接等)为例,我刚刚尝试了这种方法,将张量包装到列表中,然后将其馈送。我将它们输入到双向层,但它给出了“ValueError:当向双向RNN传递
初始\u状态时,状态应该是一个包含底层RNN状态的列表。找到:[]”但这看起来是正确的方法,我正在尝试使它工作。Thanks@MatiasValdenegroLSTM不是来自keras.layers.Merge,所以我认为这就是原因。使用_Merge时也有形状限制