单头注意力机制(ScaledDotProductAttention) python实现

输入是query和 key-value,注意力机制首先计算query与每个key的关联性(compatibility),每个关联性作为每个value的权重(weight),各个权重与value的乘积相加得到输出。
在这里插入图片描述

import torch
import torch.nn as nnclass ScaledDotProductAttention(nn.Module):""" Scaled Dot-Product Attention """def __init__(self, scale):super().__init__()self.scale = scaleself.softmax = nn.Softmax(dim=2)def forward(self, q, k, v, mask=None):u = torch.bmm(q, k.transpose(1, 2)) # 1.Matmulu = u / self.scale # 2.Scaleif mask is not None:u = u.masked_fill(mask, -np.inf) # 3.Maskattn = self.softmax(u) # 4.Softmaxoutput = torch.bmm(attn, v) # 5.Outputreturn attn, outputif __name__ == "__main__":n_q, n_k, n_v = 2, 4, 4d_q, d_k, d_v = 128, 128, 64batch = 2q = torch.randn(batch, n_q, d_q)k = torch.randn(batch, n_k, d_k)v = torch.randn(batch, n_v, d_v)mask = torch.zeros(batch, n_q, n_k).bool()attention = ScaledDotProductAttention(scale=np.power(d_k, 0.5))attn, output = attention(q, k, v, mask=mask)print(attn)print(output)

运行结果:


tensor([[[0.4165, 0.3548, 0.1667, 0.0620],[0.0381, 0.3595, 0.4584, 0.1439]],[[0.3611, 0.1587, 0.2078, 0.2723],[0.1603, 0.0530, 0.0670, 0.7198]]])
tensor([[[ 2.2813e-01, -6.3289e-01,  1.3624e+00,  8.4069e-01,  8.1762e-02,-6.3727e-01, -6.3929e-01, -1.0091e+00,  3.7668e-01, -2.9384e-01,-6.2543e-02, -4.4706e-01,  3.8331e-01,  2.2979e-02, -1.1968e+00,-3.7061e-01, -1.9007e-01, -1.7616e-01,  3.6516e-01,  1.1321e-01,-9.5077e-01, -1.3449e+00, -1.2594e+00,  4.2644e-01, -6.3195e-01,-5.2016e-01, -2.5782e-01, -2.4116e-01,  1.7582e-01, -1.5177e+00,-9.3120e-01, -4.9671e-01, -4.5024e-01, -1.0746e+00,  5.4357e-01,-6.2079e-01,  5.1379e-01,  5.6308e-02, -6.3830e-01, -3.6174e-01,-3.0044e-01, -3.0946e-01, -5.0303e-01, -1.8382e-01,  1.1064e+00,-7.5142e-01, -1.5372e-01, -3.3204e-01, -7.9568e-01,  1.3108e-01,-8.6041e-01,  2.5165e-01,  8.8248e-02,  3.7294e-01, -5.2247e-02,4.8462e-01, -7.4389e-01, -5.4351e-01, -9.7697e-01, -9.3327e-01,-4.4550e-02,  6.1108e-01, -5.4613e-01,  2.3962e-01],[ 6.9032e-02,  9.0591e-01,  8.3206e-01,  1.3668e+00,  1.8095e-02,-7.3172e-02, -3.0873e-01, -9.2571e-01,  4.3452e-01, -4.7707e-02,-3.0431e-01, -1.7578e-01,  4.0575e-01, -4.4958e-01, -4.9809e-01,-1.7263e-02, -3.8684e-01,  2.8536e-01,  4.1150e-02, -3.7069e-01,-7.2903e-01, -2.5185e-01, -1.0011e-01,  9.0434e-01, -7.8387e-02,6.9680e-01,  5.3684e-01,  2.8456e-01,  2.2887e-01, -1.7423e+00,-4.4135e-01, -2.9209e-01,  1.7053e-01, -6.4208e-01,  1.7977e-01,1.3822e-01, -1.7873e-01, -4.7619e-01, -6.7788e-01, -5.3340e-01,3.1518e-01, -5.6127e-02,  2.2175e-01, -3.9524e-01,  5.4478e-01,-5.7730e-01,  5.8043e-01, -3.0143e-01, -5.7146e-01,  1.5063e-05,-6.8221e-01, -1.3456e-02, -6.5192e-01,  7.4233e-02,  3.1776e-01,3.1504e-01, -9.5457e-01, -8.9894e-01, -7.8422e-01, -4.1440e-01,-9.4272e-02,  2.7226e-01, -7.0286e-01,  8.9388e-01]],[[-7.6068e-02,  1.6911e-01,  5.1532e-02, -5.3612e-02,  2.4258e-02,1.6490e-01,  7.4469e-01, -1.1471e+00, -4.5234e-01,  1.0684e-01,1.0929e+00, -5.8079e-01,  1.7665e-01, -2.0187e-02, -3.3850e-01,4.4517e-01, -4.5871e-01,  6.7840e-01, -4.3617e-01,  7.6141e-01,3.8135e-02, -2.3898e-01,  3.2086e-01,  4.1481e-01, -1.8267e-01,8.4337e-01,  7.8504e-02, -1.0101e+00,  5.0766e-02,  2.3338e-01,-3.5572e-01,  1.3751e-01, -4.9570e-02,  4.8627e-01, -3.3225e-01,6.5361e-01,  2.8979e-01,  9.9991e-02,  8.6995e-01, -7.2569e-02,2.5490e-01, -2.6418e-01,  6.1185e-01, -7.7243e-01, -4.6956e-01,-3.1459e-01, -2.1278e-01,  9.1588e-01, -2.1349e-02, -5.0036e-01,3.6214e-01,  1.3723e-02,  1.2322e-01, -5.3018e-01,  2.4809e-01,-3.2042e-01,  2.4807e-01, -1.5764e-01, -2.6655e-01,  1.8610e-01,-1.6585e-01,  2.3454e-01,  3.1852e-01,  6.1627e-01],[-1.7126e-01,  8.6634e-01,  4.7069e-01, -8.1842e-01, -6.2145e-01,-3.8596e-02,  1.2991e+00, -8.4528e-01, -1.5742e+00,  1.2813e+00,1.1197e+00, -1.2562e+00,  7.3848e-01,  2.2198e-02, -4.1664e-01,1.1044e+00, -1.2744e+00, -1.6599e-01, -6.4863e-01,  1.1497e+00,-1.4236e-01, -1.2829e-01, -2.7600e-01,  4.7095e-01, -5.1933e-02,8.7453e-01, -6.4251e-01, -4.2953e-01,  3.5337e-01, -2.2782e-01,2.5079e-01,  1.7728e-01,  6.4826e-01,  2.4980e-01,  8.3032e-02,2.1247e+00, -3.0265e-01, -1.9821e-01,  9.7439e-01, -3.6237e-01,-2.6392e-01, -5.1498e-01,  1.3055e+00, -9.1860e-01, -6.9769e-01,6.5717e-01,  5.8009e-01,  3.6944e-01,  2.0414e-01, -9.0271e-01,4.5972e-01,  9.4667e-01,  1.3700e-02, -2.7962e-01,  3.7535e-01,-4.1842e-01, -6.2615e-01,  6.8238e-03, -3.4866e-01,  5.7681e-01,-5.5240e-01,  1.8245e-01,  6.2508e-01,  6.0020e-01]]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出理解 AI 生图模型

目录 引言 一、Stable Diffusion原理 首先 随后 最后 二、DDPM模型 1 资料 2 原理 扩散过程 反向过程 3 公式结论 三、优缺点 优点: 缺点: 四、改进与完事 LDM代表作 原理概括 Latent Space(潜空间) 五、总结 引…

MC0204 世界警察

世界警察小码哥来谈判了,恐怖分子在银行挟持了 n 个人质,每个人质都所属一个国家,第 i 个人质所属的国家为 ci​,人质排成了一排,位置都是固定的。经过商讨,恐怖分子允许小码哥可以带走任意一段连续区间内的…

用python进行医学数据分析中缺失值的处理方法案例

在医学数据分析中,处理缺失值是一个常见的挑战。缺失值可能是由于各种原因造成的,如数据收集过程中的错误、遗漏或设备故障等。处理缺失值的方法有很多,包括删除含有缺失值的行、填充缺失值、使用插值方法等。以下是一个使用Python进行医学数…

mybatis中$和#的区别以及各自的使用场景

目录 一、# 符号和$ 符号区别: # 符号: $ 符号: 二、使用场景: # 符号 $ 符号: 三、XML代码示例 四、总结: 五、扩展:sql注入介绍及危害 在 MyBatis 中,$ 和 # 都是用于参数…

关于大根堆,set重载运算符

题目描述 \,\,\,\,\,\,\,\,\,\,制定合理的日程能够帮助利用好时间进行加训,加训和加训。 \,\,\,\,\,\,\,\,\,\,新学期开始了,应该好好学习了!凌晨两点整,加睡失败的你在为新一天的各项重要事件制定闹钟。 \,\,\,\,\,\,\,\,\,\, \,…

【SpringBoot】请求与响应参数 IoC与DI 总结

文章目录 ① —— 请求 ——一、简单参数 RequestParam1.1 参数与形参 命名相同1.2 参数与形参 命名不同 二、实体参数2.1 简单实体对象2.2 复杂实体对象 三、数组集合参数3.1 数组3.2 集合 RequestParam 四、日期参数 DateTimeFormat五、JSON参数 RequestBody六、路径参数 Pat…

C语言如何初始化字符数组?

一、问题 字符数组如何初始化,与数值型数组有什么不同? 二、解答 字符数组的初始化操作有以下⼏种⽅法: (1)逐个字符赋给数组中各元素 这是最容易理解的初始化字符数组的⽅式。例如,初始化⼀个字符数组。…

docker镜像管理基础-3

文章目录 镜像的概念docker镜像层docker存储驱动AUFSOverlayFSDeviceMapper docker registrydocker镜像的制作Docker Hubdocker镜像的获取镜像的生成基于容器制作镜像 镜像的导入与导出 镜像的概念 镜像可以理解为应用程序的集装箱,而docker用来装卸集装箱。 docke…

代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间

bootstrap自采样目前广泛应用与统计学中,其原理很简单就是通过自身原始数据抽取一定量的样本(也就是取子集),通过对抽取的样本进行统计学分析,然后继续重新抽取样本进行分析,不断的重复这一过程N&#xff0…

简单实现接口自动化测试(基于python)

一、简介 本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。 二、引言 …

text-generation-webui大模型部署

1 简介 text-generation-webui是一个挺好用的大模型部署UI,提供了很多便于交互的接口,安装部署好之后将model放置到对应的位置即可在网页访问,若是在服务器部署也可以通过ssh端口转发至公网服务器进行访问。 其中,模型的下载可参…

Android的三种动画详解(帧动画,View动画,属性动画)

Android的三种动画详解(帧动画、View动画、属性动画)_android动画效果大全-CSDN博客 1、帧动画 缺点是:占用内存较高,播放的是一帧一帧的图片,很少使用。 顺序播放预先定义的图片,类似于播放视频。 步骤…

代码随想录阅读笔记-字符串【替换数字】

题目 给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anu…

PlayBook 详解

4)Playbook 4.1)Playbook 介绍 PlayBook 与 ad-hoc 相比,是一种完全不同的运用 Ansible 的方式,类似与 Saltstack 的 state 状态文件。ad-hoc 无法持久使用,PlayBook 可以持久使用。 PlayBook 剧本是 由一个或多个 “…

使用Docker搭建Nascab

使用Docker来部署Nascab能够让这个过程变得更加灵活和便捷,因为Docker可以在隔离的环境中运行应用程序,简化了部署和配置的复杂性。 使用Docker CLI部署Nascab docker run -d \ --name nascab \ -p 18080:80 \ -p 18443:443 \ -p 18090:90 \ -p 18021:…

Linux之shell变量

华子目录 什么是变量?变量的名称示例 变量的类型变量的定义示例 自定义变量查看变量(自定义变量和全局变量) 环境变量定义环境变量(全局变量)法一法二法三env,printenv,export注意 C语言与shell…

upload-labs 0.1 靶机详解

下载地址https://github.com/c0ny1/upload-labs/releases Pass-01 他让我们上传一张图片,我们先尝试上传一个php文件 发现他只允许上传图片格式的文件,我们来看看源码 我们可以看到它使用js来限制我们可以上传的内容 但是我们的浏览器是可以关闭js功能的…

蓝桥杯-粘木棍-DFS

题目 思路 --有n根木棍,需要将其粘成m根木棍,并求出最小差值,可以用DFS枚举出所有情况。粘之前有n根短木棍,粘之后有m根长木棍,那么让长木棍的初始长度设为0。外循环让所有的短木棍都参与粘,内循环让要粘的…

windows 11访问Debian10上的共享目录

步骤 要在Windows 11上访问Debian 10.0.0的共享目录,可以通过以下步骤来实现: 1. 设置Samba服务:在Debian系统上,需要安装并配置Samba服务,以便能够实现文件夹共享。Samba是一个允许Linux/Unix服务器与Windows操作系…

threejs 实现鼠标大面积选取场景内3d模型,SelectionBox API 案例使用

SelectionBox API 案例使用 这个函数创建了一个 3D 场景,包括一个相机、光源、多个立方体以及一个 WebGL 渲染器,并在页面上渲染这个场景 function init() {// 创建一个容器 div 元素并将其添加到页面的 body 中container document.createElement(div)…