attention-is-all-you-need-pytorch 源码阅读

本文详细解析了PyTorch中Transformer模型的实现,包括训练数据流、Encoder和Decoder的结构,特别是MultiHeadAttention和PositionwiseFeedForward的运作原理。在Decoder部分,探讨了如何利用Encoder的信息进行翻译,并对Beam Search策略进行了简要介绍。
摘要由CSDN通过智能技术生成

训练数据流

train.train_epoch

training_data进行迭代, 产生batch, 其中有src_seq, trg_seq

src_seq.shape
Out[11]: torch.Size([256, 32])
src_seq
Out[12]: 
tensor([[   2, 4567, 4578,  ...,    1,    1,    1],
        [   2, 4558, 4565,  ...,    1,    1,    1],
        [   2, 4558, 4565,  ...,    1,    1,    1],
        ...,
        [   2, 4558,   64,  ...,    1,    1,    1],
        [   2, 4564, 5051,  ...,    1,    1,    1],
        [   2, 4567, 4578,  ...,    1,    1,    1]])

2是开始, 1是结束, 32是句子长度, 256是batch数

Transformer

transformer.Models.Transformer.forward

现在数据被丢进了Transformer这个模型

src_mask = get_pad_mask(src_seq, self.src_pad_idx)
trg_mask = get_pad_mask(trg_seq, self.trg_pad_idx) & get_subsequent_mask(trg_seq)

enc_output, *_ = self.encoder(src_seq, src_mask)

src_mask会在ScaledDotProductAttention用到

编码了一波, enc_output其实与输入数据的size一样

enc_output.shape
Out[9]: torch.Size([256, 36, 512])

去看Decoder

Encoder

transformer.Models.Encoder

#                               9521         512          1
self.src_word_emb = nn.Embedding(n_src_vocab, d_word_vec, padding_idx=pad_idx)

what-does-padding-idx-do-in-nn-embeddings

transformer.Models.Encoder.forward

enc_output = self.dropout(self.position_enc(self.src_word_emb(src_seq)))

512维词向量

enc_output.shape
Out[16]: torch.Size([
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值