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

相关推荐
西维10 分钟前
高效使用AI从了解 Prompt / Agent / MCP 开始
前端·人工智能·后端
柠檬味拥抱28 分钟前
基于Ray与Dask的AI Agent大规模数据并行计算优化
人工智能
聚客AI31 分钟前
📚LangChain框架下的检索增强:5步构建高效智能体系统
人工智能·langchain·llm
Fine姐35 分钟前
自然语言处理NLP L4: 高级语言模型——四种泛化平滑方式
人工智能·语言模型·自然语言处理
跟橙姐学代码35 分钟前
Python 高手都偷偷用的 Lambda 函数,你还在傻傻写 def 吗?
前端·python
袁培宇44 分钟前
python学习打卡day40
人工智能·python·学习
PythonicCC1 小时前
Django的生命周期
python·django·sqlite
伊织code1 小时前
PyTorch - Developer Notes
pytorch·微分·精度
CodeDevMaster1 小时前
Claude Code入门指南:开发者必备的AI编程工具
人工智能·ai编程·claude