Keras-为LSTM模型增加注意力机制

时间:2018-11-05 09:03:40

标签: python machine-learning keras lstm attention-model

使用以下代码:

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:keras-attention-mechanism by Philippe Rémy,但无法弄清楚如何在我的代码中正确使用它。

我想可视化注意力机制,并查看模型关注的功能是什么。

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

2 个答案:

答案 0 :(得分:4)

在本要点中,您可能会找到一个如何在Keras中使用具有激活机制的LSTM的示例

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

在SO的以下答案中:

How to add an attention mechanism in keras?

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

希望有帮助:)

答案 1 :(得分:0)

至少有六种主要的注意力形式,其中大多数是相对于第一个注意力模型(Bahdanau等人,2014年推出)的细微变化。每种形式都可以以多种方式实现,因此可以给想要为其模型添加简单关注层的人感到困惑。查看您的模型,建议您在第二个LSTM层之后添加一个关注层。这可以是基于Bahdanau的自定义关注层。

在此处共享一个实现: Create an LSTM layer with Attention in Keras for multi-label text classification neural network

然后,您可以使用此层返回的“上下文”来(更好)预测要预测的内容。因此,基本上,您的后续层(密集的S型曲面)将使用此上下文来更准确地进行预测。

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

有关更多详细信息,请参阅https://towardsdatascience.com/create-your-own-custom-attention-layer-understand-all-flavours-2201b5e8be9e