pytorch中不同的mask方法:masked_fill, masked_select, masked_scatter
在 PyTorch 中,masked_fill、masked_select 和 masked_scatter 是三种常用的掩码(mask)操作方法,它们通过布尔类型的掩码张量(mask)对原始张量进行条件筛选或修改。以下是它们的详细解释和对比:
1. masked_fill
作用:将原始张量中 mask 为 True 的位置用指定值填充,其余位置保持不变。
参数:
• mask(BoolTensor):与原始张量形状相同的布尔掩码。
• value(标量):用于填充的值。
特点:
• 原地操作:会直接修改原始张量(除非使用 masked_fill_ 的 in-place 版本)。
• 保持形状:输出张量形状与输入张量一致。
示例:
import torchx = torch.tensor([[1, 2], [3, 4]])
mask = torch.tensor([[False, True], [True, False]])y = x.masked_fill(mask, -1)
print(y)
# 输出:
# tensor([[ 1, -1],
# [-1, 4]])
典型应用:
• 在 Transformer 的注意力机制中,用 -inf 填充 padding 或未来的位置,使 softmax 后概率为 0。
• 数据清洗时屏蔽无效值(如 NaN)。
2. masked_select
作用:从原始张量中提取 mask 为 True 的元素,返回一维张量。
参数:
• mask(BoolTensor):与原始张量形状相同的布尔掩码。
特点:
• 返回一维张量:输出会丢失原始张量的维度信息。
• 非原地操作:生成新的张量。
示例:
x = torch.tensor([[1, 2], [3, 4]])
mask = torch.tensor([[False, True], [True, False]])y = x.masked_select(mask)
print(y) # tensor([2, 3])
典型应用:
• 提取满足条件的元素(如分类任务中筛选正样本)。
• 统计掩码区域的值(如计算非零元素均值)。
3. masked_scatter
作用:将另一个张量(source)中的值按顺序填充到原始张量中 mask 为 True 的位置。
参数:
• mask(BoolTensor):与原始张量形状相同的布尔掩码。
• source(Tensor):提供填充值的源张量。
特点:
• 按顺序填充:source 中的值按行优先顺序填充到 mask 为 True 的位置。
• source 的长度必须 ≥ mask 中 True 的数量。
示例:
x = torch.tensor([[1, 2], [3, 4]])
mask = torch.tensor([[False, True], [True, False]])
source = torch.tensor([10, 20])y = x.masked_scatter(mask, source)
print(y)
# 输出:
# tensor([[ 1, 10],
# [20, 4]])
典型应用:
• 动态替换张量中的部分值(如用随机噪声替换特定区域)。
• 批量更新参数时选择性地替换某些位置。
对比总结
| 方法 | 输入张量形状 | 输出形状 | 是否修改原张量 | 核心功能 |
|---|---|---|---|---|
masked_fill | 保留原形状 | 与原张量相同 | 是(可选) | 用标量填充掩码区域 |
masked_select | 保留原形状 | 一维张量 | 否 | 提取掩码区域的元素 |
masked_scatter | 保留原形状 | 与原张量相同 | 是(可选) | 用另一张量填充掩码区域 |
关键注意事项
- 掩码形状匹配:
mask必须与原始张量形状严格一致,否则会报错。 - 数据类型:
mask必须是布尔类型(BoolTensor)。 - 梯度传播:所有操作均支持自动求导,但填充的值(如
masked_fill中的value)需是浮点数以避免类型错误。 - 性能:对大规模张量频繁使用这些操作可能影响性能,建议优先使用向量化操作。
选择方法指南
• 需要保持形状并填充标量 → masked_fill
• 需要提取元素并丢弃形状 → masked_select
• 需要按顺序替换为另一张量的值 → masked_scatter
通过合理使用这些方法,可以高效实现条件筛选、数据清洗、动态修改等任务。
相关文章:
pytorch中不同的mask方法:masked_fill, masked_select, masked_scatter
在 PyTorch 中,masked_fill、masked_select 和 masked_scatter 是三种常用的掩码(mask)操作方法,它们通过布尔类型的掩码张量(mask)对原始张量进行条件筛选或修改。以下是它们的详细解释和对比:…...
TCP 协议算法解析 | RTT / 滑动窗口 / 拥塞控制
注:本文为 “TCP 协议算法解析” 相关文章合辑。 略作重排,未去重。 如有内容异常,请看原文。 TCP 的那些事儿(上) 2014 年 05 月 28 日 陈皓 TCP 是一个极为复杂的协议,因为它需要解决众多问题&#x…...
卷积神经网络 - ResNet(残差网络)
残差网络(Residual Network,ResNet)通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来提高信息的传播效率。 这是一种特殊的深度神经网络结构,由 Kaiming He 等人在 2015 年提出,目的是解…...
GreenPlum学习
简介 Greenplum是一个面向数据仓库应用的关系型数据库,因为有良好的体系结构,所以在数据存储、高并发、高可用、线性扩展、反应速度、易用性和性价比等方面有非常明显的优势。Greenplum是一种基于PostgreSQL的分布式数据库,其采用sharednothi…...
传统神经网络、CNN与RNN
在网络上找了很多关于深度学习的资料,也总结了一点小心得,于是就有了下面这篇文章。这里内容较为简单,适合初学者查看,所以大佬看到这里就可以走了。 话不多说,上图 #mermaid-svg-Z3k5YhiQ2o5AnvZE {font-family:&quo…...
无人机,雷达定点飞行时,位置发散,位置很飘,原因分析
参考: 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位,位置模式很飘 雷达的更新频率也是10HZ, 而px飞控的频率是100HZ,没有对两者之间的频率差异做出处理 所以才导致无人…...
【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解
Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在现代操作系统中,线程是程序执行流的最小单元。与进程相比,线程更加轻量级,创建和销毁的开销更小&…...
做游戏的发展方向
自己做的游戏(询问发展方向) 请选择发展方向(截止时间5.1)(投票截止3.24) (这将影响接下来用的游戏发展(未登录也可参加)) 网页 c(原)...
深入探索 iOS 卡顿优化
认识卡顿 一些概念 FPS:Frames Per Second,表示每秒渲染的帧数,通过用于衡量画面的流畅度,数值越高则表示画面越流畅。CPU:负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码…...
# 基于 OpenCV 的选择题自动批改系统实现
在教育领域,选择题的批改工作通常较为繁琐且重复性高。为了提高批改效率,我们可以利用计算机视觉技术,通过 OpenCV 实现选择题的自动批改。本文将详细介绍如何使用 Python 和 OpenCV 实现一个简单的选择题自动批改系统。 1. 项目背景 选择题…...
在Linux系统中将html保存为PNG图片
1 前言 之前使用Pyecharts库在Windows系统中生成图表并转换为PNG格式图片(传送门),现将代码放于Linux服务器上运行,结果发现错误,生成html文件之后无法保存图片。 2 原理 基于Selenium库的保存方案,其原…...
身份验证:区块链如何让用户掌控一切
在网上证明你自称的身份变得越来越复杂。由于日常生活的很多方面现在都在网上进行,保护你的数字身份比以往任何时候都更加重要。 我们可能都接受过安全培训,这些培训鼓励我们选择安全的密码、启用双因素身份验证或回答安全问题,例如“你祖母…...
嵌入式硬件: GPIO与二极管基础知识详解
1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…...
Android HAL 架构详解,底层开发不再难
目录 HAL 基础概念 HAL 是个啥? 为啥要有 HAL? HAL 在系统中的位置 HAL 工作原理 抽象接口:硬件的 “通用语言” 接口的设计思路 核心结构体 版本与兼容性 实例:相机 HAL 接口 模块加载:动态链接的魔法 加载步骤 优化策略 实例:加载音频 HAL 通信机制:HAL…...
游戏引擎学习第194天
为当天的活动做铺垫 正在进行游戏开发中的调试和视图功能开发。目标是增加一些新功能,使得在开发过程中能够有效地检查游戏行为。今天的重点是推进用户界面(UI)的开发,并且尝试在调试变量的管理上找到一个折中的解决方案。计划探…...
js文字两端对齐
目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.text-align: justify; 不就可以了吗?但是实际测试无效 二、原因及解决方法 1.原因:text-align只对非最后一行文字有效。只有一行文字时,text-align无效,要用text-alig…...
经典论文解读系列:MapReduce 论文精读总结:简化大规模集群上的数据处理
🧠 MapReduce 论文解读总结:简化大规模集群上的数据处理 原文标题:MapReduce: Simplified Data Processing on Large Clusters 作者:Jeffrey Dean & Sanjay Ghemawat 发表时间:2004 年 发表机构:Google…...
HarmonyOS 介绍
HarmonyOS简介 随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,全场景多设备的全新底座&am…...
每天一篇目标检测文献(六)——Part One
今天看的是《Object Detection with Deep Learning: A Review》 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 2.1 信息区域选择 2.2 特征提取 2.3 分类 三、深度学习的简要回顾 3.1 历史、诞生、衰落和繁荣 3.2 CNN架构和优势 一、摘要 1.1 原文 Due to object dete…...
ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动
ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动 准备工作在线安装 Windows PowerShell离线安装 Windows PowerShell更新在线更新离线更新 下载 ESXi-Customizer-PS-v2.6.0.ps1安装Python安装pip安装相关插件 下载离线捆绑包下载对应的网卡驱动(如果纯净版可以进去…...
【12】Ajax的原理和解析
一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候,得到的结果可能会和在浏览器中看到的不一样&a…...
双塔模型2之如何选择正确的正负样本
双塔模型:正负样本 选对正负样本的作用 > 改进模型的结构 正样本 什么是正样本?答:曝光且有点击的 “用户-物品” 二元组 存在的问题:存在28法则,即少部分物品(比如热门物品)占大部分点击…...
《八大排序算法》
相关概念 排序:使一串记录,按照其中某个或某些关键字的大小,递增或递减的排列起来。稳定性:它描述了在排序过程中,相等元素的相对顺序是否保持不变。假设在待排序的序列中,有两个元素a和b,它们…...
清晰易懂的Rust安装与配置教程
Rust 是一门以安全性和性能著称的系统级编程语言,适合开发操作系统、游戏引擎和高性能服务。本教程将手把手教你安装 Rust 并配置开发环境,从安装到运行第一个程序,全程无坑! 一、安装 Rust(全平台通用) 1…...
零基础使用AI从0到1开发一个微信小程序
零基础使用AI从0到1开发一个微信小程序 准备操作记录 准备 想多尝试一些新的交互方式,但我没有相关的开发经验,html,JavaScript 等都不了解,看了一些使用AI做微信小程序的视频教程,觉得自己也行…...
基于Spring Boot的社区互助平台的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【Elasticsearch入门到落地】10、初始化RestClient
接上篇《9、hotel数据结构分析》 上一篇我们讲解了导入的宾馆数据库tb_hotel表结构的具体含义,并分析如何建立其索引库。本篇我们来正式进入链接Elasticsearch的Java代码的编写阶段,先进行RestClient的初始化。 RestClient的初始化分为三步,…...
【AI大模型系列】DeepSeek V3的混合专家模型机制-MoE架构(八)
一、什么是MoE架构 MoE架构的核心思想是将输入数据分配给不同的专家子模型,然后将所有子模型的输出进行合并,以生成最终结果。这种分配可以根据输入数据的特征进行动态调整,确保每个专家处理其最擅长的数据类型或任务方面,从而实…...
HarmonyOS之深入解析如何根据url下载pdf文件并且在本地显示和预览
一、文件下载 ① 网络请求配置 下载在线文件,需要访问网络,因此需要在 config.json 中添加网络权限: {"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET","reason&qu…...
HTML5贪吃蛇游戏开发经验分享
HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中,我使用HTML5 Canvas和原生JavaScript实现了一…...
