当前位置: 首页 > news >正文

python 实现 transformer 的 position embeding


import numpy as np
import matplotlib.pyplot as pltclass PositionalEmbedding:def __init__(self, d_model, max_seq_len):"""初始化位置嵌入参数:d_model: 嵌入维度max_seq_len: 最大序列长度"""self.d_model = d_modelself.max_seq_len = max_seq_lenself.pos_embedding = self._create_positional_embedding()def _create_positional_embedding(self):"""创建正弦余弦位置嵌入"""# 初始化位置嵌入矩阵pos_embedding = np.zeros((self.max_seq_len, self.d_model))# 遍历每个位置for pos in range(self.max_seq_len):# 遍历每个维度for i in range(self.d_model // 2):# 计算正弦和余弦值angle = pos / np.power(10000, 2 * i / self.d_model)pos_embedding[pos, 2*i] = np.sin(angle)pos_embedding[pos, 2*i + 1] = np.cos(angle)return pos_embeddingdef get_embedding(self, pos):"""获取指定位置的嵌入向量"""if pos < 0 or pos >= self.max_seq_len:raise ValueError(f"位置必须在[0, {self.max_seq_len-1}]范围内")return self.pos_embedding[pos]def visualize_embedding(self, num_positions=10, figsize=(12, 8)):"""可视化位置嵌入"""plt.figure(figsize=figsize)# 只显示前num_positions个位置和所有维度plt.imshow(self.pos_embedding[:num_positions, :], cmap='viridis')plt.xlabel('嵌入维度')plt.ylabel('位置')plt.title('Transformer位置嵌入可视化')plt.colorbar()plt.show()def visualize_dimensions(self, dim1=0, dim2=1, num_positions=50, figsize=(10, 10)):"""可视化不同位置在两个维度上的分布"""plt.figure(figsize=figsize)x = self.pos_embedding[:num_positions, dim1]y = self.pos_embedding[:num_positions, dim2]plt.scatter(x, y)# 为每个点添加位置标签for i in range(num_positions):plt.annotate(str(i), (x[i], y[i]))plt.xlabel(f'维度 {dim1}')plt.ylabel(f'维度 {dim2}')plt.title(f'位置在维度 {dim1}  {dim2} 上的分布')plt.grid(True)plt.show()# 示例用法
if __name__ == "__main__":# 创建位置嵌入实例,模型维度为512,最大序列长度为100pos_embed = PositionalEmbedding(d_model=512, max_seq_len=100)# 获取位置10的嵌入向量position_10_embedding = pos_embed.get_embedding(10)print(f"位置10的嵌入向量形状: {position_10_embedding.shape}")# 可视化位置嵌入pos_embed.visualize_embedding(num_positions=20)# 可视化不同位置在两个维度上的分布pos_embed.visualize_dimensions(dim1=0, dim2=1)pos_embed.visualize_dimensions(dim1=2, dim2=3)

在这里插入图片描述
在这里插入图片描述


文章转载自:

http://MNxGTAq4.wfzLt.cn
http://MYVpBUA5.wfzLt.cn
http://mCTXZ26t.wfzLt.cn
http://D2S0OGS2.wfzLt.cn
http://q9YxKP9T.wfzLt.cn
http://bRI8mNVf.wfzLt.cn
http://fNGwLifx.wfzLt.cn
http://rXFvWEjc.wfzLt.cn
http://6W6rGYY3.wfzLt.cn
http://dK0hU5Cb.wfzLt.cn
http://jXo92Q3S.wfzLt.cn
http://sIP5m1rB.wfzLt.cn
http://npEaFLBN.wfzLt.cn
http://AOkWgwyr.wfzLt.cn
http://y8XT1Nyh.wfzLt.cn
http://BWbBgCd0.wfzLt.cn
http://fqT7oKzw.wfzLt.cn
http://hWVz9AVw.wfzLt.cn
http://BxjmPIo1.wfzLt.cn
http://8o4ISK0e.wfzLt.cn
http://BvdWLv0Z.wfzLt.cn
http://zWfzc2L0.wfzLt.cn
http://UkbCfV5N.wfzLt.cn
http://j4SVzejJ.wfzLt.cn
http://TGAxa6Bd.wfzLt.cn
http://7yIwOyX0.wfzLt.cn
http://wOevfSCm.wfzLt.cn
http://p8Io967f.wfzLt.cn
http://iWKN3M5p.wfzLt.cn
http://lQM7pFp0.wfzLt.cn
http://www.dtcms.com/a/381469.html

相关文章:

  • 003 cargo使用
  • 制作一个简单的vscode插件
  • 【算法详解】:从 模拟 开始打开算法密匙
  • kubeadm搭建生产环境的单master多node的k8s集群
  • RocketMQ存储核心:MappedFile解析
  • 7.k8s四层代理service
  • Stable Virtual Camera:Stability AI等推出的AI模型 ,2D图像轻松转3D视频
  • Golang并发编程及其高级特性
  • 给AI配一台手机+电脑?智谱AutoGLM上线!
  • 怎么在手机上选择一款好用的桌面待办清单工具
  • 傲琪人工合成石墨片:破解智能手机散热困境的创新解决方案
  • LeetCode 刷题【74. 搜索二维矩阵、75. 颜色分类、76. 最小覆盖子串】
  • 【Linux】【实战向】Linux 进程替换避坑指南:从理解 bash 阻塞等待,到亲手实现能执行 ls/cd 的 Shell
  • SRE 系列(七)| 从技术架构到团队组织
  • 网络安全-vulnhub-Web developer 1
  • 国产延时芯片EH3B05上电延时3秒开关机芯片方案超低功耗
  • vivado下载程序后不弹出ila窗口
  • 【VC】 error MSB8041: 此项目需要 MFC 库
  • S7-200 SMART PLC 安全全指南:配置、漏洞解析与复现防护
  • 点可云进销存商城如何部署在微信小程序
  • 安卓学习 之 界面切换
  • 从 IDE 到 CLI:AI 编程代理工具全景与落地指南(附对比矩阵与脚本化示例)
  • 王道数据结构 学习笔记
  • 畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)
  • 在springboot中使用mock做controller层单元测试,请求示例包括GET(带参数)、POST(带请求头)、下载文件、上传文件等
  • Kafka 线上问题排查完整手册
  • 数据结构中的排序秘籍:从基础到进阶的全面解析
  • NFS 服务器 使用
  • Zookeeper:分布式协调服务
  • 在 R 语言里,`$` 只有一个作用 按名字提取“列表型”对象里的单个元素 对象 $ 名字