以下(以上)内容来自(参考):
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()
标签:dim,Transformer,seq,encoding,##,pos,len,positional,PE From: https://www.cnblogs.com/emanlee/p/17138599.html