Keras中不同注意力层之间的区别

5
我正在尝试为我的文本分类模型添加注意力层。输入是文本(例如电影评论),输出是二元结果(例如正面 vs 负面)。
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层。作为一个相对新手的深度学习领域的人,我很难理解这些层背后的机制。

每个层都是做什么的?哪一个对我的模型最好呢?

非常感谢!

1个回答

0

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

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

还有另一个由CyberZHG维护的开源版本,称为keras-self-attention。据我所知,这不是Keras或TensorFlow库的一部分,似乎是独立的代码片段。其中包含了您提到的两个类 - SeqWeightedAttention和SeqSelfAttention层类。前者返回2D值,后者返回3D值。因此,SeqWeightedAttention应该适用于您的情况。前者似乎基于Raffel等人的松散基础,并可用于Seq分类,后者似乎是Bahdanau的变体。

总的来说,我建议您编写自己的seq到分类模型。注意力部分可以添加少于半打代码行(裸骨精华)...比您花费在集成或调试或理解这些外部库中的代码的时间要少得多。

请参考:在Keras中创建带有注意力机制的LSTM层,用于多标签文本分类神经网络

1
最好能够解答提问者的问题,并同时解释每个层的目的。 - kennysliding
修改了我的答案以更好地回答OP的问题。 - Allohvk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接