详细分析Pytorch中的masked_fill基本知识(附Demo)

目录

  • [1. 基本知识](#1. 基本知识)
  • [2. Demo](#2. Demo)

1. 基本知识

基本的原理知识如下:

  1. 输入张量和掩码

    masked_fill 接受两个主要参数:一个输入张量和一个布尔掩码

    掩码的形状必须与输入张量相同,True 表示需要填充的位置,False 表示保持原值

  2. 掩码操作

    在执行 masked_fill 操作时,函数会检查掩码中每个元素的值

    如果掩码对应的位置为 True,则在输出张量中填充指定的值;

    如果为 False,则保留输入张量中对应位置的值

  3. 输出结果

    最终生成的新张量包含了在掩码位置上被替换的值,其余位置保持原样


在代码逻辑上

  1. 创建掩码
    mask 是一个布尔张量,标识了哪些位置需要填充:
python 复制代码
[[False, True, False],
 [True, False, True],
 [False, False, True]]
  1. 执行 masked_fill
    当调用 tensor.masked_fill(mask, -1) 时,PyTorch 会遍历掩码中的每个元素:对于 mask 中的每个 True 值,tensor 在对应位置的值会被替换为 -1,对于 False 值,保持原值不变

masked_fill 操作是基于 C/C++ 的实现,因此在处理大规模数据时性能较高。常用于深度学习模型中的数据预处理,比如在填充序列、处理缺失值或标记特定条件的数据时

2. Demo

Demo 1: 基本用法

python 复制代码
import torch

# 创建一个 3x3 的张量
tensor = torch.tensor([[1, 2, 3],
                       [4, 5, 6],
                       [7, 8, 9]])

# 创建一个掩码,标记要填充的位置
mask = torch.tensor([[False, True, False],
                     [True, False, True],
                     [False, False, True]])

# 使用 masked_fill 填充掩码位置为 -1
result = tensor.masked_fill(mask, -1)

print("原始张量:")
print(tensor)
print("\n填充后的张量:")
print(result)

截图如下:

Demo 2: 与条件结合使用

python 复制代码
import torch

# 创建一个随机张量
tensor = torch.randn(3, 3)

# 创建掩码:标记负值的位置
mask = tensor < 0

# 将负值位置填充为 0
result = tensor.masked_fill(mask, 0)

print("原始张量:")
print(tensor)
print("\n填充后的张量 (负值填充为 0):")
print(result)

截图如下:

Demo 3: 结合计算

python 复制代码
import torch

# 创建一个张量
tensor = torch.tensor([[10, 20, 30],
                       [40, 50, 60],
                       [70, 80, 90]])

# 创建掩码:标记大于 50 的位置
mask = tensor > 50

# 用 999 填充大于 50 的位置
result = tensor.masked_fill(mask, 999)

print("原始张量:")
print(tensor)
print("\n填充后的张量 (大于 50 的位置填充为 999):")
print(result)

截图如下:

相关推荐
神马行空5 分钟前
一文解读DeepSeek大模型在政府工作中具体的场景应用
人工智能·大模型·数字化转型·deepseek·政务应用
合合技术团队7 分钟前
实测对比|法国 AI 独角兽公司发布的“最强 OCR”,实测效果如何?
大数据·人工智能·图像识别
冷月半明8 分钟前
Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案
python·selenium
冷月半明8 分钟前
《Pandas 性能优化:向量化操作 vs. Swifter 加速,谁才是大数据处理的救星?》
python·数据分析·pandas
蒹葭苍苍87315 分钟前
LoRA、QLoRA微调与Lama Factory
人工智能·笔记
蹦蹦跳跳真可爱58915 分钟前
Python----机器学习(基于PyTorch的线性回归)
人工智能·pytorch·python·机器学习·线性回归
搞不懂语言的程序员39 分钟前
装饰器模式详解
开发语言·python·装饰器模式
mosquito_lover144 分钟前
矿山边坡监测预警系统设计
人工智能·python·深度学习·神经网络·视觉检测
船长@Quant44 分钟前
PyTorch量化进阶教程:第二章 Transformer 理论详解
pytorch·python·深度学习·transformer·量化交易·sklearn·ta-lib
契合qht53_shine1 小时前
OpenCV 从入门到精通(day_03)
人工智能·opencv·计算机视觉