Transformer代码学习

在init函数里写 需要用到的东西,如softmax、buffer;在forward里写怎么执行的,具体怎么做的

导入库
import numpy as np
import torch
from torch import nn
from einops import rearrange, repeat
from einops.layers.torch import Rearrange
求位置编码的类

思路:
给每个位置加上一个不同的偏置值,以此区别相同的词在不同位置上的不同含义,给输入带上位置信息。得到所有元素的位置编码表(是一系列预生成的东西,不是通过训练得到的)。

如何计算位置编码?----每个位置的x加上当前位置的偏置值
偏置值的计算:
相邻维度(偶数用正弦,奇数用余弦)共享同一频率,但相位不同,使模型能捕捉位置间的相对关系。分母 1000 0 2 i / d h i d 10000^{2i/d_hid} 100002i/dhid 随着维度索引 i = hid_j//2 增大而指数级增长,导致位置编码的频率逐渐降低。(其中10000是经验值)
在这里插入图片描述

class PositionalEncoding(nn.Module):
	# d_hid(隐藏状态的维度)和 n_position(位置的数量)
    def __init__(self, d_hid, n_position=200):
    	super(PositionalEncoding, self).__init__() # 继承父类nn.Module
    	self.register_buffer('pos_table', self._get_sinusoid_encoding_table(n_position, d_hid))
    # 求所有输入元素位置编码表的方法
    def _get_sinusoid_encoding_table(self, n_position, d_hid)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值