Transformer模型中的位置编码

位置编码在Transformer模型中是用于注入序列中位置信息的,因为Transformer的自注意力机制本身不考虑单词的顺序。为了计算位置编码,通常使用不同频率的正弦和余弦函数。

import torch  
  
seq_len = 10  # 序列长度  
d_model = 512  # 模型的维度  
  
# 初始化位置编码张量  
position_encoding = torch.zeros(seq_len, d_model)  
  
# 生成位置索引并增加一个维度以便广播  
position = torch.arange(0, seq_len, dtype=torch.float).unsqueeze(1)  
'''
torch.arange(0, seq_len, dtype=torch.float)生成了一个从0到seq_len - 1的一维张量,并将其数据类型设置为float。这个张量代表了序列中的位置索引。
.unsqueeze(1)用于增加张量的维度。在索引为1的维度上增加了一个大小为1的维度。如果原始张量的形状是(seq_len,),那么unsqueeze(1)之后的张量形状将变为(seq_len, 1)。这样做是为了后续能够与位置编码的其他维度进行广播操作。
'''
  
# 计算用于调节频率的分母项  
div_term = torch.exp(torch.arange(0, d_model, 2).float() * -(torch.log(torch.tensor(10000.0)) / d_model))  
'''
div_term用于计算一个随着维度索引增加而减小的值,这个值用于调节正弦和余弦函数的频率。通过这种方式,每个维度上的位置编码都会有一个不同的频率,从而允许模型捕捉到更丰富的位置信息。
'''

  
# 使用正弦函数填充偶数索引的位置编码   
position_encodi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值