Transformer 模型中的positional encoding(位置编码)计算理解(2)
以下(以上)内容来自(参考):
https://www.bilibili.com/video/BV1Di4y1c7Zm?p=2&vd_source=6292df769fba3b00eb2ff1859b99d79e
import numpy as np def getPositionEncoding(seq_len,dim,n=10000): ## seq_len: 序列长度 ## dim 词向量的维度 ## n 为固定的值 PE = np.zeros(shape=(seq_len,dim)) ## 为序列的每一个词算一个位置向量 seq_len*dim for pos in range(seq_len): ## 为序列的每一个词算一个位置向量 #print("词的位置为", pos) ## 0,1,2,3.。。 for i in range(int(dim/2)): ## 每次循环计算两个值,因此,循环次数要减半 #print("i=",i) denominator = np.power(n, 2*i/dim) PE[pos,2*i] = np.sin(pos/denominator) #; print("PE[pos,2*i]=",PE[pos,2*i]) PE[pos,2*i+1] = np.cos(pos/denominator)#; print("PE[pos,2*i+1]=",PE[pos,2*i+1]) return PE import matplotlib.pyplot as plt P = getPositionEncoding(seq_len=100, dim=512, n=10000) cax = plt.matshow(P) plt.gcf().colorbar(cax) plt.show()
import numpy as np def getPositionEncoding(seq_len,dim,n=10000): ## seq_len: 序列长度 ## dim 词向量的维度 ## n 为固定的值 PE = np.zeros(shape=(seq_len,dim)) ## 为序列的每一个词算一个位置向量 seq_len*dim for pos in range(seq_len): ## 为序列的每一个词算一个位置向量 #print("词的位置为", pos) ## 0,1,2,3.。。 for i in range(int(dim/2)): ## 每次循环计算两个值,因此,循环次数要减半 #print("i=",i) denominator = np.power(n, 2*i/dim) PE[pos,2*i] = np.sin(pos/denominator) #; print("PE[pos,2*i]=",PE[pos,2*i]) PE[pos,2*i+1] = np.cos(pos/denominator)#; print("PE[pos,2*i+1]=",PE[pos,2*i+1]) return PE import matplotlib.pyplot as plt P = getPositionEncoding(seq_len=300, dim=512, n=10000) cax = plt.matshow(P) plt.gcf().colorbar(cax) plt.show()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2010-05-09 WHY YOUR BOSS MAY START SWEATING THE SMALL STTUFF
2008-05-09 SQL Server Error: No Process is on the Other End of the Pipe