首页 > 其他分享 >Muti Head Attention

Muti Head Attention

时间:2024-07-23 16:51:17浏览次数:12  
标签:Head Attention nn self Muti head score import model

Muti Head Attention

Muti Head Attention
#导入包
import torch
from torch import nn
import torch.nn.functional as f 
import math 
x = torch.rand(128,32,512)
d_moule=512
n_head=8
from numpy import transpose
from torch import batch_norm


class MutiHeadAttention(nn.Module):
    def __init__(self,d_model,n_head):
        """
            d_model:输入向量的维度
            n_head:多头注意力机制的头数
        """
        super(MutiHeadAttention,self).__init__()
        #将参数赋予实例
        self.n_head = n_head #多头注意力的头数
        self.d_mouel = d_model #向量的维度
        #定义对q,k,v的线性变换
        self.w_q = nn.Linear(d_model,d_model)
        self.w_k = nn.Linear(d_model,d_model)
        self.w_v = nn.Linear(d_model,d_model)
        self.w_combine = nn.Linear(d_model,d_model)
        #dim=-1 表示Softmax操作将沿着最后一个维度进行。
        # 在多分类问题中,这通常意味着对每个样本的类别预测进行Softmax操作,将原始的类别得分(logits)转换为概率分布。
        self.softmax=nn.Softmax(dim=-1)
    def forward(self,q,k,v,mask=None):
        batch,time,dimension = q.shape
        #计算每个头处理的特征维度数。
        n_d = self.d_mouel//self.n_head
        #对q,k,v进行线性变换,并进行维度调整便于后续计算
        q,k,v = self.w_q(q),self.w_k(k),self.w_v(v)
        q = q.view(batch,time,self.n_head,n_d).permute(0,2,1,3)
        k = k.view(batch,time,self.n_head,n_d).permute(0,2,1,3)
        v = v.view(batch,time,self.n_head,n_d).permute(0,2,1,3)
        #进行赋分计算
        [email protected](2,3)/math.sqrt(n_d)
        #掩码机制
        if mask is not None:
            score = score.masked_fill(mask==0,-10000)
        #加权求和
        score = self.softmax(score)@v
        score = score.permute(0,2,1,3).contiguous().view(batch,time,dimension)
        out = self.w_combine(score)
        return out
attention = MutiHeadAttention(d_model=d_moule,n_head=n_head)
out = attention(x,x,x)
print(out)

标签:Head,Attention,nn,self,Muti,head,score,import,model
From: https://www.cnblogs.com/qian-li-xju/p/18318670

相关文章

  • Transformer 模型和Attention注意力机制学习笔记
    文章目录Transformer模型结构注意力机制ScaledDot-ProductAttention缩放点注意力机制工作流程并行机制Multi-HeadAttention多头注意力机制工作流程Embedding单词Embedding位置编码PositionalEncodingEncoderAdd&NormFeedForwardNetworkDecoderMaskedMul......
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10引入结合SimAM和SKAttention形成全新的SK
    1.SKAM介绍     SKAM(SimAMandSKAttentionModule)注意力机制结合了SimAM和SKAttention的优点,能够在图像特征提取中表现出更为优异的性能。     SimAM注意力机制     SimAM(SimplifiedAttentionModule)是一种简单但有效的注意力机制,旨在增强......
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10引入结合EMAttention和NAMAttention形成
    1. EAMA注意力机制     EAMA注意力模块比NAMAttention和EMAttention在图像特征提取方面更强,其优势主要体现在以下几个方面:     (1).综合利用通道和空间信息:     EAMA结合了EMAttention和NAMAttention两种注意力机制,充分利用了通道和空间信......
  • vscode注释插件koroFileHeader使用, vue 文件注释插件
    使用文档https://github.com/OBKoro1/koro1FileHeader/wiki/安装和快速上手git地址https://github.com/OBKoro1/koro1FileHeader安装测试搜索setting.json用户输入如下配置//头部注释"fileheader.customMade":{//Author字段是文件的创建者可以在specialO......
  • HttpHeaders类详解,这一篇就够了
    目录一.总述二.案例展示三.set方法和add方法的区别1.set方法:2.add方法:区别总结:总结一.总述在Java中,HttpHeaders是一个用于表示HTTP请求或响应头的类,它属于java.net.http包,从Java11开始引入。这个类提供了一种方便的方式来操作HTTP消息头,包括添加、删除和获......
  • Self Attention
    先前的一些文章简单介绍了一些点云检测和分割的文献资料,可以看出近些年越来越多的方法结合了Transformer,因此有必要说明一下Transformer的结构,在介绍之前需要了解一些知识点:比如SelfAttention、LayerNormalization等等,这一篇先简单了解下SelfAttention,后续再介绍其他相关内容。......
  • `useHeadSafe`:安全生成HTML头部元素
    title:useHeadSafe:安全生成HTML头部元素date:2024/7/17updated:2024/7/17author:cmdragonexcerpt:摘要:“useHeadSafe”是Vue.js组合函数,用于安全生成HTML头部元素,通过限制输入值格式避免XSS等安全风险,提供了安全值白名单确保只有安全属性被添加。categories:......
  • 大模型长度扩展:直接外推, PI, NTK-aware, NTK-by-parts, Dynamic NTK, ALiBi, YaRN, S
    目录第一部分背景知识:从进制表示谈到直接外推、线性内插、进制转换1.1从进制表示到直接外推1.1.1进制表示1.1.2直接外推1.2从线性内插到进制转换1.2.1线性内插1.2.2进制转换第二部分从RoPE、直接外推到位置内插PositionInterpolation2.1旋转位置嵌入2.1.1RoPE的快速回......
  • 二次封装antd的ProTable、EditableProTable,结合use-antd-resizable-header,做一个列可
    原先是一个项目模块内需求,迭代的时候领导要求项目全面翻新,所有表格都要可伸缩列如果一个一个页面写伸缩列的话,每个页面都要引用一次use-antd-resizable-header,有点累赘找了网上,暂时没看见这个有人整理这个组件。直接上代码importProTablefrom"@ant-design/pro-table";i......
  • useHeadSafe:安全生成HTML头部元素
    title:useHeadSafe:安全生成HTML头部元素date:2024/7/17updated:2024/7/17author:cmdragonexcerpt:摘要:“useHeadSafe”是Vue.js组合函数,用于安全生成HTML头部元素,通过限制输入值格式避免XSS等安全风险,提供了安全值白名单确保只有安全属性被添加。categories:前端开......