7.4.5 Transformer.encoder

nn.Transformer 模块中包含一个编码器部分,可通过属性transformer.encoder访问,其本质是一个nn.TransformerEncoder
实例。通过其forward方法,可以对源序列进行编码,提取上下文相关的语义表示。如下图所示:

图片[1]-7.4.5 Transformer.encoder-大赛人网

示例代码如下:

from torch import nn

# 初始化 Transformer
transformer = nn.Transformer(
    d_model=512, nhead=8,
    num_encoder_layers=6, num_decoder_layers=6,
    batch_first=True
)

# 调用编码器
memory = transformer.encoder(
    src=src_emb, 
    src_key_padding_mask=src_pad_mask
)

假如源序列为:

图片[2]-7.4.5 Transformer.encoder-大赛人网

则具体的输入输出为:

  • 输入
图片[3]-7.4.5 Transformer.encoder-大赛人网

输出

图片[4]-7.4.5 Transformer.encoder-大赛人网

7.4.6 Transformer.decoder

nn.Transformer 模块中包含一个解码器部分,可通过属性transformer.decoder访问,其本质是一个nn.TransformerDecoder实例。通过其forward方法,可以基于编码器的输出(memory)和目标序列的嵌入表示,逐步生成目标序列中的各个token。如下图所示:

图片[5]-7.4.5 Transformer.encoder-大赛人网

示例代码如下

from torch import nn

# 初始化 Transformer
transformer = nn.Transformer(
    d_model=512, nhead=8,
    num_encoder_layers=6, num_decoder_layers=6,
    batch_first=True
)

# 调用编码器
memory = transformer.encoder(
    src=src_emb, 
    src_key_padding_mask=src_pad_mask
)

# 调用解码器(逐步生成)
output = transformer.decoder(
    tgt=tgt_emb,
    memory=memory,
    tgt_mask=tgt_mask,
    tgt_key_padding_mask=tgt_pad_mask,
    memory_key_padding_mask=src_pad_mask
)

若源序列和目标序列为:

图片[6]-7.4.5 Transformer.encoder-大赛人网

则具体输出输出为:

  • 输入
图片[7]-7.4.5 Transformer.encoder-大赛人网
图片[8]-7.4.5 Transformer.encoder-大赛人网
图片[9]-7.4.5 Transformer.encoder-大赛人网

输出

图片[10]-7.4.5 Transformer.encoder-大赛人网
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容