12

使用以下代码:

model = Sequential()

num_features = data.shape[2]
num_samples = data.shape[1]

model.add(
    LSTM(16, batch_input_shape=(None, num_samples, num_features), return_sequences=True, activation='tanh'))
model.add(PReLU())
model.add(Dropout(0.5))
model.add(LSTM(8, return_sequences=True, activation='tanh'))
model.add(Dropout(0.1))
model.add(PReLU())
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

我试图了解如何在第一个 LSTM 层之前添加注意机制。我找到了以下 GitHub:Philippe Rémy 的 keras-attention-mechanism,但无法弄清楚如何将它与我的代码一起使用。

我想可视化注意力机制,看看模型关注的特征是什么。

任何帮助将不胜感激,尤其是代码修改。谢谢 :)

4

2 回答 2

5

您可以在此要点中找到如何在 Keras 中使用具有激活机制的 LSTM 的示例

https://gist.github.com/mbollmann/ccc735366221e4dba9f89d2aab86da1e

在以下关于 SO 的答案中:

如何在 keras 中添加注意力机制?

要可视化您的激活,您可以使用以下存储库https://github.com/philipperemy/keras-activations

于 2018-11-05T09:30:15.673 回答
0

至少有六种主要的注意力类型,其中大多数是在 2014 年问世的第一个注意力模型(Bahdanau 等人)的微小变化。每种类型都可以通过多种方式实现,所以这可能会混淆想要为她/他的模型添加一个简单的注意力层的人。查看您的模型,我建议在您的第二个 LSTM 层之后添加一个注意力层。这可以是基于 Bahdanau 的自定义注意力层。

这里分享一个实现: Create an LSTM layer with Attention in Keras for multi-label text classification neural network

然后,您可以使用该层返回的“上下文”来(更好地)预测您想要预测的任何内容。所以基本上你的后续层(密集 sigmoid 层)将使用这个上下文来更准确地预测。

注意力权重也由上面的层返回。这些可以路由到一个简单的显示器。

更多具体细节请参考https://towardsdatascience.com/create-your-own-custom-attention-layer-understand-all-flavours-2201b5e8be9e

于 2020-11-19T08:22:57.560 回答