pytorch torch.nan_to_num函数介绍

torch.nan_to_num 函数简介

torch.nan_to_num 是 PyTorch 中的一个函数,用于将张量中的特殊浮点值(如 NaN+Inf-Inf)替换为指定的数值,或使用默认替代值。

函数签名

复制代码
torch.nan_to_num(input, nan=0.0, posinf=None, neginf=None)

参数

  1. input:

    • 输入张量。
    • 可以包含 NaN、正无穷(+Inf)、负无穷(-Inf)等特殊值。
  2. nan (可选):

    • 替换 NaN 的值。
    • 默认是 0.0
  3. posinf (可选):

    • 替换正无穷 (+Inf) 的值。
    • 默认是张量元素的最大有限值 (torch.finfo(input.dtype).max)。
  4. neginf (可选):

    • 替换负无穷 (-Inf) 的值。
    • 默认是张量元素的最小有限值 (torch.finfo(input.dtype).min)。

返回值

  • 返回一个张量,其中的 NaN+Inf-Inf 被替换为指定的值。
  • 输出张量与输入张量的形状和数据类型相同。

工作原理

  • NaN : 检测到 NaN 后,替换为参数 nan 指定的值。
  • +Inf-Inf : 检测到无穷值后,分别替换为参数 posinfneginf 指定的值。

简单示例

复制代码
import torch

# 创建包含 NaN、+Inf 和 -Inf 的张量
x = torch.tensor([float('nan'), float('inf'), -float('inf'), 1.0, -2.0])

# 替换 NaN 和 Inf
result = torch.nan_to_num(x, nan=0.0, posinf=10.0, neginf=-10.0)
print(result)

输出:

复制代码
tensor([  0.,  10., -10.,   1.,  -2.])

使用默认值

如果没有指定 posinfneginf,函数会使用数据类型的最大或最小值。

复制代码
x = torch.tensor([float('nan'), float('inf'), -float('inf')], dtype=torch.float32)

result = torch.nan_to_num(x)
print(result)

输出:

复制代码
tensor([ 0.0000e+00,  3.4028e+38, -3.4028e+38])

其中 3.4028e+38-3.4028e+38 分别是 float32 类型的最大和最小有限值。

广播支持

torch.nan_to_num 支持广播机制,当输入包含多维张量时同样可以逐元素替换:

复制代码
x = torch.tensor([[float('nan'), float('inf')], [-float('inf'), 1.0]])
result = torch.nan_to_num(x, nan=0.0, posinf=100.0, neginf=-100.0)
print(result)

输出:

复制代码
tensor([[   0.,  100.],
        [-100.,    1.]])

应用场景

1. 清洗数据 : 替换缺失值(NaN)或异常值(+Inf-Inf)以便进一步处理。

复制代码
x = torch.tensor([float('nan'), 5.0, float('inf'), -float('inf')])
clean_x = torch.nan_to_num(x, nan=0.0)
print(clean_x)  # tensor([ 0.,  5.,  max_value, min_value])

2. 防止计算异常 : 在模型训练或推理过程中,防止出现 NaN 或无穷值导致的计算失败。

3. 图像/信号处理: 在处理图像或信号数据时,用于替换缺失的像素值或异常值。

注意事项

  1. 数据类型兼容性:

    • 如果输入张量的类型为整数,使用 torch.nan_to_num 会报错,因为整数类型无法表示 NaN 或无穷值。
    • 函数只能用于浮点类型张量(如 torch.float32, torch.float64)。
  2. 默认替换值:

    • 对于正无穷和负无穷,默认替换值依赖于张量的数据类型。
  3. 性能开销:

    • 对大张量来说,函数调用会带来一定的计算开销,需在实际应用中注意性能。

总结

torch.nan_to_num 是处理数据异常(如缺失值和溢出值)的重要工具,特别适用于数据预处理和深度学习模型的训练过程。通过灵活的参数设置,可以有效替换各种特殊值,保证后续计算的稳定性和可靠性。

相关推荐
zhl773 分钟前
YOLOv5:从0搭建你的第一个目标检测模型
人工智能
TechFind4 分钟前
用 OpenClaw 搭建企业微信 AI Agent:从零到自动化客服只需 30 分钟
人工智能·agent
FishCoderh4 分钟前
OpenClaw部署后Tools工具权限被禁用?一行配置解决
人工智能
飞哥数智坊2 小时前
openclaw 不是全站第一!但它的爆发,足以引人深思
人工智能
zone77393 小时前
001:LangChain的LCEL语法学习
人工智能·后端·面试
zone77393 小时前
001:简单 RAG 入门
后端·python·面试
F_Quant3 小时前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
程序员鱼皮3 小时前
微软竟然出了免费的 AI 应用开发课?!我已经学上了
人工智能·程序员·ai编程
DevnullCoffe3 小时前
基于 OpenClaw + Pangolinfo API 的 Amazon 价格监控系统:架构设计与最佳实践
人工智能·架构
Baihai_IDP3 小时前
回头看 RLHF、PPO、DPO、GRPO 与 RLVR 的发展路径
人工智能·llm·强化学习