torch.nn.Transformer

Transformer

def __init__(self, d_model: int = 512, nhead: int = 8, num_encoder_layers: int = 6, 
			 num_decoder_layers: int = 6, dim_feedforward: int = 2048, 
			 dropout: float = 0.1, activation: str = "relu", custom_encoder: 
			 Optional[Any] = None, custom_decoder: Optional[Any] = None) 
			 -> None:
常用参数解释
d_model表示每个数据的维度,例如:一个单词 Embedding 维度是512(默认值)
nheadEncoder 和 Decoder 部分多头注意力机制的头数
num_encoder_layersEncoder 部分层数
num_decoder_layersDecoder 部分层数
dim_feedforwardFeedforward 部分的维度
activation激活函数,可使用 “gelu”
def forward(self, src: Tensor, tgt: Tensor, 
			src_mask: Optional[Tensor] = None, 
			tgt_mask: Optional[Tensor] = None,
			memory_mask: Optional[Tensor] = None, 
			src_key_padding_mask: Optional[Tensor] = None,
			tgt_key_padding_mask: Optional[Tensor] = None, 
			memory_key_padding_mask: Optional[Tensor] = None) 
			-> Tensor:
参数解释
srcEncoder 的输入,维度为 (S,N,E)
tgtDecoder 的输入,维度为(T,N,E)
src_maskEncoder 的 attention 处理时,使用在score上面的mask矩阵,维度为(S,S)
tgt_maskDecoder 的 attention 处理时,使用在score上面的mask矩阵,维度为(T,T)
memory_mask使用 Encoder 生成的矩阵在 Decoder 中的 attention 处理时,使用在score上面的mask矩阵,维度为(T,S)
src_key_padding_mask维度为(N,S)
tgt_key_padding_mask维度为(N,T)
memory_key_padding_mask维度为(N,S)

暂时没研究明白key_padding_mask的作用是什么,如果有知道的可以给我讲讲嘛?

注:S 是 Encoder 部分输入句子的长度;T 是 Decoder 部分输入句子的长度;N 是 batch 长度;E 是特征值的维度,也就是 Embedding 过程中每个词表示的维度

def generate_square_subsequent_mask(self, sz: int) -> Tensor:

返回一个上三角为负无穷的矩阵

[In] : nn.Transformer().generate_square_subsequent_mask(5)
[Out]:
tensor([[0., -inf, -inf, -inf, -inf],
        [0., 0., -inf, -inf, -inf],
        [0., 0., 0., -inf, -inf],
        [0., 0., 0., 0., -inf],
        [0., 0., 0., 0., 0.]])

TransformerEncoder

def __init__(self, encoder_layer, num_layers, norm=None):
参数
encoder_layer单层模型,将该模型重复添加到 ModuleList 中,次数为 num_layers
num_layersEncoder 层数
normEncoder 最终结果进行一次规范化处理模型
def forward(self, src: Tensor, 
			mask: Optional[Tensor] = None, 
			src_key_padding_mask: Optional[Tensor] = None) 
			-> Tensor:
参数
srcEncoder 输入
mask注意力机制中的mask,也就是 Transformer 中的 src_mask
src_key_padding_maskTransformer 中的 src_key_padding_mask

TransformerDecoder

def __init__(self, decoder_layer, num_layers, norm=None):

def forward(self, tgt: Tensor, memory: Tensor, 
			tgt_mask: Optional[Tensor] = None,
            memory_mask: Optional[Tensor] = None, 
            tgt_key_padding_mask: Optional[Tensor] = None,
            memory_key_padding_mask: Optional[Tensor] = None) -> Tensor:

与 TransformerEncoder 和 Transformer 相似,不赘述

TransformerEncoderLayer

def __init__(self, d_model, nhead, dim_feedforward=2048, 
			 dropout=0.1, activation="relu"):
			
def forward(self, src: Tensor, 
			src_mask: Optional[Tensor] = None, 
			src_key_padding_mask: Optional[Tensor] = None) -> Tensor:

与 TransformerEncoder 和 Transformer 相似,不赘述

TransformerDecoderLayer

def __init__(self, d_model, nhead, dim_feedforward=2048, 
			 dropout=0.1, activation="relu"):

def forward(self, tgt: Tensor, memory: Tensor, 
			tgt_mask: Optional[Tensor] = None, 
			memory_mask: Optional[Tensor] = None,
			tgt_key_padding_mask: Optional[Tensor] = None, 
			memory_key_padding_mask: Optional[Tensor] = None)
			-> Tensor:

与 TransformerEncoder 和 Transformer 相似,不赘述

MultiheadAttention

def __init__(self, embed_dim, num_heads, dropout=0., 
			 bias=True, add_bias_kv=False, add_zero_attn=False, 
			 kdim=None, vdim=None):
参数
embed_dim表示每个数据的维度(与d_model相同),例如:一个单词 Embedding 维度是512(默认值)
num_heads多头注意力机制的数量
dropoutdropout 层的权值
bias是否使用bias
kdim & vdimK,Q,V 矩阵的维度,默认使用 embed_dim
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值