nn.TransformerDecoderLayer

import torch
import torch.nn as nn

decode_layer = nn.TransformerDecoderLayer(d_model=512, nhead=8)  # d_model is the input feature, nhead is the number of head in the multiheadattention
memory = torch.ones(10,32,512)  # the sequence from the last layer of the encoder ; 可以类比为: batch_size * seqence_length * hidden_size
tgt = torch.zeros(20,20,512)  # the sequence to the decoder layer
out = decode_layer(tgt,memory)
print(out.shape)# 20*20*512

Details: TransformerDecoderLayer — PyTorch 1.10.0 documentation

如下面一个网络: 选用了Roberta 作为 encoder and the decoder is 6-layers Transformer.

encoder = model_class.from_pretrained(args.model_name_or_path,config=config)  # RobertaModel 当作一个 encoder, 加载的model为: roberta
decoder_layer = nn.TransformerDecoderLayer(d_model=config.hidden_size, nhead=config.num_attention_heads) # d_model = 768, nhead= 12---the number of heads in the multiheadattention models
decoder = nn.TransformerDecoder(decoder_layer, num_layers=6)

Details for TRANSFORMERDECODER: TransformerDecoder — PyTorch 1.10.0 documentation

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这些代码是Transformer类的构造函数中的一部分,它们定义了Transformer模型的各个组件及其参数。 - `self.src_mask = None`:这是一个源端的掩码,初始值为None。在attention计算中,当某个位置的掩码为1时,表示该位置的信息不应该被考虑,因此可以在构造函数中初始化为None。 - `self.pos_encoder = PositionalEncodingTwo(feature_size)`:这是一个位置编码器,用于将输入序列中的每个位置映射到一个固定的向量表示。这里使用的是PositionalEncodingTwo类,它将位置编码的向量加到输入嵌入中,以便模型可以更好地处理序列数据。 - `self.encoder_layer = nn.TransformerEncoderLayer(d_model=feature_size, nhead=8, dropout=dropout)`:这是一个Transformer编码器层,它由多头注意力和前馈神经网络组成。这里使用的是nn.TransformerEncoderLayer类,它的d_model参数表示输入和输出的特征维度,nhead表示多头注意力的头数,dropout表示Dropout概率。 - `self.transformer_encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=num_layers)`:这是一个Transformer编码器,它由多个编码器层堆叠而成。这里使用的是nn.TransformerEncoder类,它的第一个参数是编码器层,第二个参数是编码器层数。 - `self.decoder_layer = nn.TransformerDecoderLayer(d_model=feature_size, nhead=8, dropout=dropout)`:这是一个Transformer解码器层,它也由多头注意力和前馈神经网络组成。这里使用的是nn.TransformerDecoderLayer类,它的参数与编码器层相同。 - `self.transformer_decoder = nn.TransformerDecoder(self.decoder_layer, num_layers=num_layers)`:这是一个Transformer解码器,它也由多个解码器层堆叠而成。这里使用的是nn.TransformerDecoder类,它的第一个参数是解码器层,第二个参数是解码器层数。 - `self.decoder = nn.Linear(feature_size,1)`:这是一个线性层,用于将Transformer解码器的输出映射到一个标量值。这里将特征维度(feature_size)的向量映射到一个标量,以便进行回归任务。 - `self.init_weights()`:这是一个初始化权重的函数,用于初始化模型的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值