李沐66_使用注意力机制的seq2seq——自学笔记

本文介绍了如何在编码器-解码器模型中集成Bahdanau注意力机制,通过注意力权重在解码过程中有效地传递信息,用于机器翻译任务,并展示了如何训练和评估模型。最后,通过可视化注意力权重,展示了模型在不同时间步对输入序列的选择性聚焦。
摘要由CSDN通过智能技术生成

加入注意力

1.编码器对每次词的输出作为key和value

2.解码器RNN对上一个词的输出是query

3.注意力的输出和下一个词的词嵌入合并进入RNN

一个带有Bahdanau注意力的循环神经网络编码器-解码器模型

总结

1.seq2seq通过隐状态在编码器和解码器中传递信息

2.注意力机制可以根据解码器RNN的输出来匹配到合适的编码器RNN的输出来更有效的传递信息。

pip install d2l==0.17.6  ### 很重要,不要下载错了,对于colab
import torch
from torch import nn
from d2l import torch as d2l

注意力解码器

AttentionDecoder类定义了带有注意力机制解码器的基本接口

class AttentionDecoder(d2l.Decoder):
    """带有注意力机制解码器的基本接口"""
    def __init__(self, **kwargs):
        super(AttentionDecoder, self).__init__(**kwargs)

    @property
    def attention_weights(self):
        raise NotImplementedError

Seq2SeqAttentionDecoder类中 实现带有Bahdanau注意力的循环神经网络解码器。

1.编码器在所有时间步的最终层隐状态,将作为注意力的键和值;

2.上一时间步的编码器全层隐状态,将作为初始化解码器的隐状态;

3.编码器有效长度(排除在注意力池中填充词元)。

class Seq2SeqAttentionDecoder(AttentionDecoder):
    def __init__(self, vocab_size, embed_size, num_hiddens, num_layers,
                 dropout=0, **kwargs):
        super(Seq2SeqAttentionDecoder, self).__init__(**kwargs)
        self.attention = d2l.AdditiveAttention(num_hiddens,num_hiddens,num_hiddens, dropout)
        self.embedding = nn.Embedding(vocab_size, embed_size)
        self.rnn = nn.GRU(
            embed_size + num_hiddens, num_hiddens, num_layers,
            dropout=dropout)
        self.dense = nn.Linear(num_hiddens, vocab_size)

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值