使用变压器块keras的自我注意

2024-09-28 05:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解新实现的keras转换器类:https://keras.io/examples/nlp/text_classification_with_transformer/

我看到文本首先被嵌入,然后使用自我关注。但是,如果我想使用另一种嵌入而不是TokenAndPositionEmbedding-例如,在我的例子中,我有预嵌入的句子,并且喜欢对它们使用自我关注

我不明白的是self.pos_emb做了什么。类{{CD2}}正在返回^ {< CD5> }和^ {CD6> },其中{{CD5}}是^ {CD8}}和^ {CD6}},是要考虑的单词数吗?那么它基本上返回了两件事?我不明白这一点

class TokenAndPositionEmbedding(layers.Layer):
    def __init__(self, maxlen, vocab_size, emded_dim):
        super(TokenAndPositionEmbedding, self).__init__()
        self.token_emb = layers.Embedding(input_dim=vocab_size, output_dim=emded_dim)
        self.pos_emb = layers.Embedding(input_dim=maxlen, output_dim=emded_dim)

    def call(self, x):
        maxlen = tf.shape(x)[-1]
        positions = tf.range(start=0, limit=maxlen, delta=1)
        positions = self.pos_emb(positions)
        x = self.token_emb(x)
        return x + positions

或者我只是把我嵌入的句子输入到MultiHeadSelfAttention,然后在后面放一个密集的层用于分类


Tags: posselfinitlayersdef句子kerasdim
1条回答
网友
1楼 · 发布于 2024-09-28 05:25:23

正如你所知道的,变压器是一种只基于大量Dense层的结构,具有剩余的概念;然而,这使得时间序列数据失去其时间依赖性。因此,对于变压器,您需要<强>定位位置< /强>,您可以将其视为该结构的附加信息,从而不会错过时间依赖性。如果您想通过使用keras更好地理解它,我将推荐Tensorflow编写的官方教程:https://www.tensorflow.org/tutorials/text/transformer 详细说明了你想知道的事情

相关问题 更多 >

    热门问题