Keras不同注意层之间的差异

时间:2019-10-24 18:01:16

标签: tensorflow keras recurrent-neural-network attention-model

我正在尝试为我的文本分类模型添加一个关注层。输入是文本(例如电影评论),输出是二进制结果(例如正面对负面)。

model = Sequential()
model.add(Embedding(max_features, 32, input_length=maxlen))
model.add(Bidirectional(CuDNNGRU(16,return_sequences=True)))
##### add attention layer here #####
model.add(Dense(1, activation='sigmoid'))

经过一番搜索,我发现了一些可读取的有关keras的注意层。 Keras中内置了keras.layers.Attention层。 keras-self-attention程序包中还有SeqWeightedAttentionSeqSelfAttention layer。作为深度学习领域的新手,我很难理解这些层次背后的机制。

这些外行都做什么?哪一个最适合我的模型?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

如果您使用的是RNN,我不建议您使用keras.layers.Attention类。

在分析tf.keras.layers.Attention Github代码以更好地了解如何使用该代码时,我可能遇到的第一行是-“该类适用于Dense或CNN网络,不适用于RNN网络” < / p>

Cyber​​ZHG还维护了另一个开源版本,称为 keras自我关注。据我所知,这不是Keras或TensorFlow库的一部分,似乎是独立的代码。这包含您提到的两个类-SeqWeightedAttention和SeqSelfAttention图层类。前者返回2D值,后者返回3D值。因此,SeqWeightedAttention应该适合您的情况。前者似乎是基于Raffel等人的,可以用于Seq分类,后者似乎是Bahdanau的变体。

通常,我建议您编写自己的seq到分类模型。可以在不到六行的代码中添加关注点(基本知识)……比花在集成,调试或理解这些外部库中的代码上的时间要少得多。

请参考:Create an LSTM layer with Attention in Keras for multi-label text classification neural network