Keras - 向 LSTM 模型添加注意机制 [重复]

Posted

技术标签:

【中文标题】Keras - 向 LSTM 模型添加注意机制 [重复]【英文标题】:Keras - Add attention mechanism to an LSTM model [duplicate] 【发布时间】:2019-04-08 14:59:34 【问题描述】:

使用以下代码:

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,但无法弄清楚如何将它与我的代码一起使用。

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

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

【问题讨论】:

这里添加关注的简单方法:***.com/questions/62948332/… 【参考方案1】:

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

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

在以下关于 SO 的回答中:

How to add an attention mechanism in keras?

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

【讨论】:

感谢您的回复,您将如何可视化在我共享的 GitHub 存储库上看到的输出? 感谢您的帮助,但是,我正在为我的用例寻找更多观点 :)【参考方案2】:

至少有六种主要的注意力类型,其中大多数是 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

【讨论】:

以上是关于Keras - 向 LSTM 模型添加注意机制 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

基于多头注意力机制LSTM股价预测模型

Python深度学习12——Keras实现注意力机制(self-attention)中文的文本情感分类(详细注释)

向 Keras 中的 LSTM 提供训练任务

Keras LSTM 模型过拟合

如何使用 keras-self-attention 包可视化注意力 LSTM?

Keras LSTM - 为啥“相同”模型和相同权重的结果不同?