实现pytorch注意力机制-one demo
主要组成部分:
1. 定义注意力层:
定义一个Attention_Layer类,接受两个参数:hidden_dim(隐藏层维度)和is_bi_rnn(是否是双向RNN)。
2. 定义前向传播:
定义了注意力层的前向传播过程,包括计算注意力权重和输出。
3. 数据准备
生成一个随机的数据集,包含3个句子,每个句子10个词,每个词128个特征。
4. 实例化注意力层:
实例化一个注意力层,接受两个参数:hidden_dim(隐藏层维度)和is_bi_rnn(是否是双向RNN)。
5. 前向传播
将数据传递给注意力层的前向传播方法。
6. 分析结果
获取第一个句子的注意力权重。
7. 可视化注意力权重
使用matplotlib库可视化了注意力权重。
**主要函数和类:**
Attention_Layer类:定义了注意力层的结构和前向传播过程。
forward方法:定义了注意力层的前向传播过程。
torch.from_numpy函数:将numpy数组转换为PyTorch张量。
matplotlib库:用于可视化注意力权重。
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt# 定义注意力层
class Attention_Layer(nn.Module):def __init__(self, hidden_dim, is_bi_rnn):super(Attention_Layer,self).__init__()self.hidden_dim = hidden_dimself.is_bi_rnn = is_bi_rnnif is_bi_rnn:self.Q_linear = nn.Linear(hidden_dim * 2, hidden_dim * 2, bias = False)self.K_linear = nn.Linear(hidden_dim * 2, hidden_dim * 2, bias = False)self.V_linear = nn.Linear(hidden_dim * 2, hidden_dim * 2, bias = False)else:self.Q_linear = nn.Linear(hidden_dim, hidden_dim, bias = False)self.K_linear = nn.Linear(hidden_dim, hidden_dim, bias = False)self.V_linear = nn.Linear(hidden_dim, hidden_dim, bias = False)def forward(self, inputs, lens):# 获取输入的大小size = inputs.size()Q = self.Q_linear(inputs) K = self.K_linear(inputs).permute(0, 2, 1)V = self.V_linear(inputs)max_len = max(lens)sentence_lengths = torch.Tensor(lens)mask = torch.arange(sentence_lengths.max().item())[None, :] < sentence_lengths[:, None]mask = mask.unsqueeze(dim = 1)mask = mask.expand(size[0], max_len, max_len)padding_num = torch.ones_like(mask)padding_num = -2**31 * padding_num.float()alpha = torch.matmul(Q, K)alpha = torch.where(mask, alpha, padding_num)alpha = F.softmax(alpha, dim = 2)out = torch.matmul(alpha, V)return out# 准备数据
data = np.random.rand(3, 10, 128) # 3个句子,每个句子10个词,每个词128个特征
lens = [7, 10, 4] # 每个句子的长度# 实例化注意力层
hidden_dim = 64
is_bi_rnn = True
att_L = Attention_Layer(hidden_dim, is_bi_rnn)# 前向传播
att_out = att_L(torch.from_numpy(data).float(), lens)# 分析结果
attention_weights = att_out[0, :, :].detach().numpy() # 获取第一个句子的注意力权重# 可视化注意力权重
plt.imshow(attention_weights, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

相关文章:
实现pytorch注意力机制-one demo
主要组成部分: 1. 定义注意力层: 定义一个Attention_Layer类,接受两个参数:hidden_dim(隐藏层维度)和is_bi_rnn(是否是双向RNN)。 2. 定义前向传播: 定义了注意力层的…...
深入Flask:如何优雅地处理HTTP请求与响应
哈喽,大家好,我是木头左! 本文将带你深入了解如何在Flask中优雅地处理HTTP请求和响应,让你的应用更加高效、安全和用户友好。 创建一个简单的Flask应用 让从创建一个最简单的Flask应用开始: from flask import Flaskapp = Flask(__name__)@app.route(/) def...
JVM ②-双亲委派模型 || 垃圾回收GC
这里是Themberfue 在上节课对内存区域划分以及类加载的过程有了简单的了解后,我们再了解其他两个较为重要的机制,这些都是面试中常考的知识点,有必要的话建议背出来,当然不是死记硬背,而是要有理解的背~~~如果对 JVM …...
jQuery介绍(快速、简洁JavaScript库,诞生于2006年,主要目标是简化HTML文档操作、事件处理、动画和Ajax交互)
文章目录 **核心功能 & 亮点**1. **简化 DOM 操作**2. **链式调用**3. **跨浏览器兼容**4. **便捷的事件绑定**5. **Ajax 封装**6. **动画效果** **现状与适用场景**- **传统项目维护**:许多旧系统(如 WordPress 插件、老企业网站)仍依赖…...
python旅游推荐系统+爬虫+可视化(协同过滤算法)
✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术,以实现从网站抓取旅游数据、个性化推荐和直观展…...
Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)
一、依赖包(Ubuntu 20.04/Debian 11) 点击下载https://www.spark-app.store/download_dependencies_latest 1、 下载最新的依赖包。 请访问星火应用商店依赖包下载页面, 下载最新的依赖包。2、解压依赖包 </...
【Excel笔记_6】条件格式和自定义格式设置表中数值超过100保留1位,超过1000保留0位,低于100为默认
方法一:自定义格式 选中需要设置格式的单元格区域。右键选择设置单元格格式,或者在工具栏中选择开始 -> 数字 -> 自定义格式。在类型框中输入以下自定义格式: [>1000]0;[>100]0.0;G/通用格式解释: [>1000]0&…...
UDP与TCP
用UDP一定比用TCP快吗? 假设我们需要在a电脑的进程发一段数据到b电脑的进程我们可以选择使用TCP或UDP协议进行通信。 对于TCP这样的可靠性协议每次消息发出后都能明确知道对方有没有收到,就像打电话一样,只要“喂喂"两下对方就能回你个…...
Web开发技术概述
Web开发技术涵盖了前端和后端开发,以及数据库技术。前端开发包括使用HTML、CSS、JavaScript等原生技术,以及jQuery、Bootstrap、AngularJS、React、Vue等框架。后端开发则涉及ASP.NET、PHP、Python Web(Flask、Django)、Java Web&…...
解压rar格式的软件有哪些?8种方法(Win/Mac/手机/网页端)
RAR 文件是一种常见的压缩文件格式,由尤金・罗谢尔(Eugene Roshal)开发,因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩,大幅减小存储空间,方便数据传输与备份。然而…...
uniapp开发:首次进入 App 弹出隐私协议窗口
前言:在移动应用开发中,隐私协议弹窗是一个非常重要的功能。它不仅符合法律法规的要求(如 GDPR、CCPA 等),还能增强用户对 App 的信任感。本文将介绍如何在 Uniapp 开发的 App 中实现“首次进入弹出隐私协议窗口&#…...
执行pnpm run dev报错:node:events:491 throw er; // Unhandled ‘error‘ event的解决方案
vite搭建的vue项目,使用pnpm包管理工具,执行pnpm run dev,报如下错误: 报错原因: pnpm依赖安装不完整,缺少esbuild.exe文件,导致无法执行启动命令。 解决方案: 根据错误提示中提到…...
OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的…...
JVM中的线程池详解:原理→实践
一、为什么需要线程池? 在多线程编程中,频繁地创建和销毁线程会带来显著的性能开销。 想象一下,如果你经营一家西餐厅,每次有顾客到来你都雇佣新的服务员,顾客吃完结账后就解雇——这种模式是不是非常效率低下且成本高…...
SNARKs 和 UTXO链的未来
1. 引言 SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。 本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)…...
JavaScript设计模式 -- 外观模式
在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…...
百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
百达翡丽(Patek Philippe):瑞士制表的巅峰之作 在钟表界,百达翡丽(Patek Philippe) 一直被誉为“世界三大名表”之一,并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…...
阿里云一键部署DeepSeek-V3、DeepSeek-R1模型
目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后,调用API返回404 请求太长导致EAS网关超时 部署完成后,如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…...
分享一款AI绘画图片展示和分享的小程序
🎨奇绘图册 【开源】一款帮AI绘画爱好者维护绘图作品的小程序 查看Demo 反馈 github 文章目录 前言一、奇绘图册是什么?二、项目全景三、预览体验3.1 截图示例3.2 在线体验 四、功能介绍4.1 小程序4.2 服务端 五、安装部署5.1 快速开始~~5.2 手动部…...
【练习】【双指针】力扣热题100 283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出…...
边走边聊 Python 3.8:Chapter 13:Flask 入门
Chapter 13:Flask 入门 从脚本到网页,是程序员世界观的第一次扩张。本章将带你理解路由、模板、静态文件、表单提交等 Web 开发的核心概念,并把你的知识库系统升级成一个真正可在浏览器访问的应用。你会体验到:当程序能被多人访问,它就拥有了新的生命。 “从脚本到网页,…...
2025年机器学习工具链选型与优化指南
1. 2025年机器学习工具箱全景概览当我在2024年中期开始为团队规划下一代机器学习技术栈时,发现工具生态正经历着三个显著转变:首先是计算图框架从静态向动态的彻底迁移,其次是模型开发从单机环境向云原生工作流的演进,最后是AutoM…...
实战避坑:支付宝周期扣款签约回调的坑,我们踩了,你别再踩了(附Java代码)
支付宝周期扣款开发中的回调分离陷阱与实战解决方案 在移动支付生态中,周期扣款功能已经成为会员订阅、定期服务等场景的标配能力。作为国内支付领域的领头羊,支付宝提供的周期扣款接口因其稳定性与完备性备受开发者青睐。但在实际开发过程中,…...
Leptos包大小优化终极指南:如何将WASM文件缩减至最小
Leptos包大小优化终极指南:如何将WASM文件缩减至最小 【免费下载链接】leptos Build fast web applications with Rust. 项目地址: https://gitcode.com/GitHub_Trending/le/leptos Leptos是一个使用Rust构建快速Web应用的框架,通过WebAssembly&a…...
Python 爬虫分布式架构基础与多机协同采集方案
前言随着爬取目标站点规模扩大、反爬策略升级、数据量级指数级增长,单机单线程、单机多线程爬虫会天然遇到三大瓶颈:IP 限制、采集效率不足、单机性能上限。普通并发爬虫受限于单机 CPU、带宽、IP 池,面对海量站点与高频采集需求时࿰…...
OpenAI隐私过滤器
多年来,这个笑话一直在自我书写。OpenAI。 这家公司的名字里包含"Open",就像"超大虾"里包含"超大"一样。好吧,看来压力足够让OpenAI开始认真出货了。 2026年4月22日,OpenAI在Apache 2.0下发布了一…...
【仅开放30天】2026临床R认证训练营:涵盖R包CRAN审核规范、REDCap API实时对接、区块链存证日志模块
更多请点击: https://intelliparadigm.com 第一章:2026临床R认证训练营全景导览 2026临床R认证训练营是面向医学研究者、生物统计师与临床数据科学家的高阶实践型培训项目,聚焦R语言在真实世界证据(RWE)、CDISC标准&a…...
告别系统驱动!用libusb直接读写USB麦克风音频数据的保姆级教程(附避坑指南)
告别系统驱动!用libusb直接读写USB麦克风音频数据的保姆级教程(附避坑指南) 当你在开发需要超低延迟音频采集的AI语音识别系统,或是为嵌入式设备定制USB音频解决方案时,操作系统自带的通用音频驱动往往会成为性能瓶颈。…...
别再折腾listings了!用minted包在LaTeX里给Python代码高亮,保姆级配置避坑指南
告别listings的繁琐:用minted包在LaTeX中实现Python代码优雅排版 如果你曾经在LaTeX文档中插入过Python代码,大概率经历过listings宏包的折磨——复杂的配置参数、单调的配色方案、难以调整的边框样式。作为学术写作和技术报告中的常客,代码…...
别再手动写FIFO了!Vivado IP核配置异步FIFO的完整避坑指南(附状态机控制代码)
Vivado异步FIFO IP核实战:从配置陷阱到高效应用的完整解决方案 1. 为什么你应该停止手动编写FIFO控制器 在FPGA开发中,数据缓冲和跨时钟域传输是每个工程师都会遇到的经典问题。传统做法是自己编写FIFO控制器,但这往往导致以下问题࿱…...
