- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊 | 接辅导、项目定制
🏡我的环境:
- 语言环境:Python3.11.4
- 编译器:Jupyter Notebook
- torcch版本:2.0.1
-
import numpy as np import matplotlib.pyplot as plt def getPositionEncoding(seq_len,d,n=10000): P = np.zeros((seq_len,d)) for k in range(seq_len): for i in np.arange(int(d/2)): denominator = np.power(n,2*i/d) P[k,2*i] = np.sin(k/denominator) P[k,2*i+1] = np.cos(k/denominator) return P P = getPositionEncoding(seq_len=4,d=4,n=100) print(P)
def plotSinusoid(k,d=512,n=10000):
x = np.arange(0,100,1)
denominator = np.power(n,2*x/d)
y = np.sin(k/denominator)
plt.plot(x,y)
plt.title('k =' + str(k))
fig = plt.figure(figsize=(15,4))
for i in range(4):
plt.subplot(141+i)
plotSinusoid(i*4)
P = getPositionEncoding(seq_len=100,d=512,n=10000)
cax = plt.matshow(P)
plt.gcf().colorbar(cax)
二、小结
Transformers 使用智能位置编码方案,其中每个位置/索引都映射到一个向量。因此,位置编码层的输出是一个矩阵,其中矩阵的每一行代表序列中的一个编码对象与其位置信息相加。