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

self-attention部分代码注释

 多头注意力机制(Multi-Head Attention, MHA),是 Transformer 模型的核心组件之一。以下是对代码的逐行解析和详细说明:   

attention-is-all-you-need-pytorch-master\transformer\SubLayers.py

class MultiHeadAttention(nn.Module):''' Multi-Head Attention module ''''''n_head: 多头注意力head数量 8d_model: 输入向量的维度 512d_k    : 单head中 Q, k 向量的维度 512 / 8 = 64d_v    : 单head中V向量的维度 d_k, 与d_v是独立的,可以相等也可以不等。在这里d_k = d_v 64'''def __init__(self, n_head, d_model, d_k, d_v, dropout=0.1):super().__init__()self.n_head = n_headself.d_k = d_kself.d_v = d_vself.w_qs = nn.Linear(d_model, n_head * d_k, bias=False)self.w_ks = nn.Linear(d_model, n_head * d_k, bias=False)self.w_vs = nn.Linear(d_model, n_head * d_v, bias=False)self.fc = nn.Linear(n_head * d_v, d_model, bias=False)self.attention = ScaledDotProductAttention(temperature=d_k ** 0.5)self.dropout = nn.Dropout(dropout)self.layer_norm = nn.LayerNorm(d_model, eps=1e-6)def forward(self, q, k, v, mask=None):'''q, k, v 的形状为 (32, 10, 512)(batch_size=32,seq_len=10,d_model=512)'''d_k, d_v, n_head = self.d_k, self.d_v, self.n_headsz_b, len_q, len_k, len_v = q.size(0), q.size(1), k.size(1), v.size(1)residual = q# Pass through the pre-attention projection: b x lq x (n*dv)# Separate different heads: b x lq x n x dvq = self.w_qs(q).view(sz_b, len_q, n_head, d_k) #view 为多头k = self.w_ks(k).view(sz_b, len_k, n_head, d_k)v = self.w_vs(v).view(sz_b, len_v, n_head, d_v)# Transpose for attention dot product: b x n x lq x dv#q, k, w的维度为(32, 10, 8, 64) 转换后维度为(32, 8, 10, 64)q, k, v = q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2)if mask is not None:mask = mask.unsqueeze(1)   # For head axis broadcasting.'''attn:  (32, 8, 10, 10)输出q:  (32, 8, 10, 64)'''q, attn = self.attention(q, k, v, mask=mask)# Transpose to move the head dimension back: b x lq x n x dv# Combine the last two dimensions to concatenate all the heads together: b x lq x (n*dv)q = q.transpose(1, 2).contiguous().view(sz_b, len_q, -1) #(32, 10, 512)q = self.dropout(self.fc(q))q += residualq = self.layer_norm(q)return q, attn

attention-is-all-you-need-pytorch-master\transformer\Modules.py

class ScaledDotProductAttention(nn.Module):''' Scaled Dot-Product Attention '''def __init__(self, temperature, attn_dropout=0.1):super().__init__()self.temperature = temperatureself.dropout = nn.Dropout(attn_dropout)def forward(self, q, k, v, mask=None):'''q: (32, 8, 10, 64)  -> 缩放 -> (32, 8, 10, 64)k: (32, 8, 10, 64)  -> 转置 -> (32, 8, 64, 10)attn = q @ k.transpose(2, 3): (32, 8, 10, 10)attn: (32, 8, 10, 10)  -> softmax -> (32, 8, 10, 10)v: (32, 8, 10, 64)output = attn @ v: (32, 8, 10, 64)'''attn = torch.matmul(q / self.temperature, k.transpose(2, 3))if mask is not None:attn = attn.masked_fill(mask == 0, -1e9)attn = self.dropout(F.softmax(attn, dim=-1))output = torch.matmul(attn, v)return output, attn

相关文章:

self-attention部分代码注释

多头注意力机制(Multi-Head Attention, MHA),是 Transformer 模型的核心组件之一。以下是对代码的逐行解析和详细说明: attention-is-all-you-need-pytorch-master\transformer\SubLayers.py class MultiHeadAttention(nn.Mo…...

idea里的插件spring boot helper 如何使用,有哪些强大的功能,该如何去习惯性的运用这些功能

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...

常用的配置文件格式对比(ini,toml,yaml,json,env,settings.py)及应用程序修改自身配置并保留注释

代码与环境配置解耦 git分支的代码应做到“环境无关”:代码本身不硬编码任何环境特定的配置(如数据库连接、密钥、API地址),而是通过外部机制动态注入。 配置与代码分离:将配置信息存储在代码库之外(如环…...

Java IO 和 NIO 的基本概念和 API

一、 Java IO (Blocking IO) 基本概念: Java IO 是 Java 平台提供的用于进行输入和输出操作的 API。Java IO 基于 流 (Stream) 的模型,数据像水流一样从一个地方流向另一个地方。Java IO 主要是 阻塞式 I/O (Blocking I/O),即线程在执行 I/O …...

小智AI桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…...

MySQL 入门“鸡”础

一、Win10 与Ubuntu安装 以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例: --- # Ubuntu 安装 MySQL 详细指南 在本教程中,我们将向您展示如何在 Ubuntu 上安装 MySQL,并完成基本的安全配置。以下是具体步骤: # 1. 安装 …...

Redis 中有序集合(Sorted Set)的使用方法

文章目录 前言1. 有序集合的特点2. 常用命令2.1 添加元素(ZADD)2.2 获取元素分数(ZSCORE)2.3 获取元素排名(ZRANK / ZREVRANK)2.4 获取范围内的元素(ZRANGE / ZREVRANGE)2.5 获取分数…...

WIn32 笔记:本专栏课件

专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:无 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始,我们进入预备章。 本节内容,属于是 …...

Unity git 获取当前修改或者新增的文件列表

直接上代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using UnityEngine;public class GitFileStatusCheckerTools : MonoBehaviour {// 获取Git变更文件列表(新增/修…...

结构型模式 - 桥接模式 (Bridge)

结构型模式 - 桥接模式 (Bridge) 桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。 // 软件接口,作为实现部分 interface Software {void run(); }// 游戏软件类,实现 Software 接口 class Game…...

如何让传统制造企业从0到1实现数字化突破?

随着全球制造业不断向智能化、数字化转型,传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新,更是管理、文化、业务流程等全方位的变革。从零开始,如何带领一家传统制造企业走向数字化突破,是许多企业领导者面…...

【Elasticsearch】script_fields 和 runtime_fields的区别

script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能,但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比: 1.定义和应用场景 • script_fields: • 定义:通过 Painless 脚本…...

城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章

当艺术与科技相遇,会碰撞出怎样的火花?城电科技推出的光伏太阳花,以其独特的设计与智能化的功能,给出了答案。这款产品不仅具备太阳能发电的实用功能,更是一件充满科技属性的艺术性光伏产品,吸引了广泛关注…...

【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)

【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑运算符就是双目运算符;弹幕运算符代表有一个操作数&a…...

快节奏生活

在当今快节奏的商务环境中,效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台,以其独特的功能和优势,为职场人士带来了前所未有的便捷与高效,成为了众多用户心中的“宝藏”工具。 1、亿可达:自动化流程的搭…...

【音视频】音视频录制、播放原理

一、音视频录制原理 通常,音视频录制的步骤如下图所示: 我们分别从音频和视频开始采样,通过麦克风和摄像头来接受我们的音频信息和图像信息,这通常是同时进行的,不过,通常视频的采集会比音频的采集慢&…...

前端Sass面试题及参考答案

目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...

Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)

在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器,从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…...

AF3 unify_template_features 函数解读

AlphaFold3 data_pipeline 模块的 unify_template_features 函数用于将多条链的模板特征整合为一个统一的 FeatureDict,以适应对多链复合物的处理。每条链的模板特征经过索引偏移处理后,拼接为一个完整的模板特征矩阵。 该方法的核心在于: 序列对齐:根据每条链的长度,将模…...

FFmpeg.NET:.NET 平台上的音视频处理利器

FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库,能够方便地在 C# 项目中处理音视频文件。它支持多种操作,包括转码、剪辑、合并、分离音频等。 功能 解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式: 码率(…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...