LSTM 自动编码器顶部的注意力层出现不兼容错误

Posted

技术标签:

【中文标题】LSTM 自动编码器顶部的注意力层出现不兼容错误【英文标题】:Attention layer on top of LSTM Autoencoder getting incompatibility error 【发布时间】:2019-09-02 09:40:24 【问题描述】:

我正在部署Bidirectional LSTM Autoencoder,并在此基础上添加attention layer

在添加注意力层之前,它工作正常。我从这个post 中得到了添加注意力层的想法。 添加关注后,它抱怨维度不兼容。

这是我添加关注后的代码:

inputs = Input(shape=(SEQUENCE_LEN, EMBED_SIZE), name="input")
encoded = Bidirectional(LSTM(LATENT_SIZE, return_sequences=True), name="encoder_lstm")(inputs)
attention = Dense(SEQUENCE_LEN, activation='tanh')(encoded)
attention = Flatten()(attention)
attention = Activation('softmax')(attention)
attention = RepeatVector(SEQUENCE_LEN)(attention)
attention = Permute([2, 1])(attention)
sent_representation = merge([encoded, attention], mode='mul')
sent_representation = Lambda(lambda xin: K.sum(xin, axis=-2), output_shape=(units,))(sent_representation)
autoencoder = Model(inputs, sent_representation)
autoencoder.compile(optimizer="sgd", loss='mse')

这是我得到的错误:

Using TensorFlow backend.
(?, 40, 50)
(?, 40, 40)
Traceback (most recent call last):
(?, 40, 40)
  File "/home/sgnbx/Downloads/projects/LSTM_autoencoder-master/walkingaround.py", line 131, in <module>
    sent_representation = merge([activations, attention], mode='mul')
  File "/home/sgnbx/anaconda3/envs/tf_gpu/lib/python3.4/site-packages/keras/engine/topology.py", line 470, in __call__
    self.assert_input_compatibility(x)
  File "/home/sgnbx/anaconda3/envs/tf_gpu/lib/python3.4/site-packages/keras/engine/topology.py", line 411, in assert_input_compatibility
    str(K.ndim(x)))
Exception: Input 0 is incompatible with layer dense_1: expected ndim=2, found ndim=3

我已经阅读了几篇关于此错误的帖子,即:this 和 this 和 this。 但它们与我的错误不同。另外,有些人建议让return_sequences = False,但我认为这不是正确的方法。稍后在代码中,如果我们将其设置为 False,它会再次引发错误!

所以,我觉得我做错了什么,否则,为什么网络应该使用标准架构引发错误。

所以我的问题是: 这个网络有什么问题 以及如何解决。

如果您能详细解释一下,我将不胜感激,或者给我一些链接来讨论我的代码中的冲突。

提前致谢!

【问题讨论】:

请大家帮忙 您找到解决方案了吗?我遇到了同样的错误 【参考方案1】:

更正下一行:

encoded = Bidirectional(LSTM(LATENT_SIZE, return_sequences=False), name="encoder_lstm")(inputs)

只需将返回序列设为 False。

【讨论】:

以上是关于LSTM 自动编码器顶部的注意力层出现不兼容错误的主要内容,如果未能解决你的问题,请参考以下文章

带有嵌入层的 Keras LSTM 自动编码器

LSTM 自动编码器问题

层 lstm_9 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。收到的完整形状:[None, 300, 300, 1]

为啥会出现错误:类与键名的键值编码不兼容?

keras中不兼容的密集层错误

Keras LSTM 层输入形状