transformer_位置编码代码笔记

news/2024/7/19 10:43:10 标签: transformer, 笔记, 深度学习

transformer__0">transformer_位置编码代码笔记

transformer输入的序列中,不同位置的相同词汇可能会表达不同的含义,通过考虑位置信息的不同来区分序列中不同位置的相同词汇。

位置编码有多种方式,此处仅记录正余弦位置编码

正余弦位置编码公式如下:
在这里插入图片描述
代码如下:

import numpy as np
import torch

def positional_encoding(seq_len, d_model):
    # 创建一个形状为(seq_len, 1)的数组,其中的值为[0, 1, 2, ... seq_len-1]
    position = np.arange(seq_len)[:, np.newaxis]  # 使用np.newaxis增加列上的维度,position矩阵为seq_len×1

    # 计算除数,这里的除数将用于计算正弦和余弦的频率,div_term矩阵为1×d_model
    div_term = np.exp(np.arange(0, d_model, 2) * -(np.log(10000.0) / d_model))

    # 初始化位置编码矩阵为零,后续计算所有位置的位置编码并更新相对位置的初始化位置编码矩阵
    pe = np.zeros((seq_len, d_model))
    
    # 以下是针对偶数列使用正弦函数,奇数列使用余弦函数,最终输出的结果矩阵为seq_len×d_model
    # 对矩阵的偶数列机型正弦函数编码
    pe[:, 0::2] = np.sin(position * div_term)
    # 对矩阵的奇数列机型余弦函数编码
    pe[:, 1::2] = np.cos(position * div_term)

    # 返回位置编码矩阵,转换为PyTorch张量
    return torch.tensor(pe, dtype=torch.float32)

if __name__ == '__main__':
    # 使用示例
    seq_len = 50  # 定义序列长度
    d_model = 512  # 定义模型的embedding维度
    pe = positional_encoding(seq_len, d_model)  # 获得位置编码
    print(pe)

http://www.niftyadmin.cn/n/5357518.html

相关文章

SVN单个项目迁移到Gitlab,保留历史提交记录

1.版本说明 svn --version:版本1.14.1 git --version:版本2.43.0.windows.1 git svn --version:执行不报错,显示版本git-svn version 2.43.0.windows.1 (svn 1.14.2) 2.提取用户的列表 提取所有SVN用户的列表到当前路径下的u…

【Linux网络编程一】网络基础(网络框架)

【Linux网络编程一】网络基础(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装&…

uniapp 使用canvas 画海报,有手粘贴即可用

html部分 <view click"doposter">下载海报</view> <canvas canvas-id"myCanvas" type2d style"width: 370px; height: 550px;opcity:0;position: fixed;z-index:-1;" id"myCanvas" />js 部分 drawBackground() {c…

正则表达式补充以及sed

正则表达式&#xff1a; 下划线算 在单词里面 解释一下过程&#xff1a; 在第二行hello world当中&#xff0c;hello中的h 与后面第一个h相匹配&#xff0c;所以hello中的ello可以和abcde匹配 在world中&#xff0c;w先匹配h匹配不上&#xff0c;则在看0&#xff0c;r&#…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程&#xff1a; 首先我们从浏览器发送一个请求到服务端&#xff0c;由 Flask 接收了这个请求以后&#xff0c;这个请求将会由路由系统接收。然后在路由系统中&#xff0c;还可以挂入一些 “勾子”&#xff0c;在进入我们的 viewFunction …

vim 编辑器 查找和替换文本 命令

在 Vim 编辑器中&#xff0c;可以利用查找和替换功能高效地处理缓冲区中的数据。 要查找文本&#xff0c;只需要按下斜线 / 键后输入查找字符串&#xff0c;然后按回车键。 Vim 会根据情况给出以下三种反馈&#xff1a; 1. 如果查找的文本出现在光标当前位置之后&#xff0c…

跟着cherno手搓游戏引擎【16】Camera和Uniform变量的封装

相机封装&#xff1a; OrthographicCamera.h: #pragma once #include <glm/glm.hpp> namespace YOTO {class OrthographicCamera{public:OrthographicCamera(float left,float right , float bottom,float top);const glm::vec3& GetPosition()const { return m_Pos…

第17次修改了可删除可持久保存的前端html备忘录:增加年月日星期,增加倒计时,更改保存区名称可以多个备忘录保存不一样的信息,匹配背景主题:现代深色

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码&#xff1a; <!DOCTYPE html> <html lang&quo…