torch.nan_to_num 函数

torch.nan_to_num 是 PyTorch 中用于将张量中的 NaN、正无穷、负无穷替换为指定数值的函数。它的主要作用是清理数据中的异常值,避免它们在后续计算中传播(比如 NaN 会污染整个梯度或损失)。

函数签名

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

参数说明

参数 含义 默认行为
input 输入张量 ---
nan 替换 NaN 的值 0.0
posinf 替换 +∞ 的值 若为 None,则用输入 dtype 能表示的最大有限值
neginf 替换 -∞ 的值 若为 None,则用输入 dtype 能表示的最小有限值
out 输出张量 ---

基本用法

python 复制代码
import torch

x = torch.tensor([1.0, float('nan'), float('inf'), float('-inf'), 2.0])

# 默认替换
y = torch.nan_to_num(x)
# tensor([1., 0., 3.4028e+38, -3.4028e+38, 2.])

# 自定义替换值
y = torch.nan_to_num(x, nan=0.0, posinf=1e6, neginf=-1e6)
# tensor([1., 0., 1.0e+06, -1.0e+06, 2.])

直观例子

batch_size=2

图片 weather timeofday scene
图 1 clear(0) -1(undefined) highway(0)
图 2 rain(1) -1(undefined) residential(1)

这个 batch 中 timeofday 全部是 -1

  • weather、scene:正常计算 loss
  • timeofday:全部被 ignore → CrossEntropyLoss 输出nan
  • 总和 val_loss = loss_weather + nan + loss_scene → 结果 = nan

典型使用场景

损失函数中出现 NaN/Inf 时:在计算 loss 前对预测值或中间结果做清理,防止训练崩溃。

python 复制代码
loss = criterion(torch.nan_to_num(pred), target)

归一化/除法后:分母为 0 会产生 Inf 或 NaN,可用它兜底。

python 复制代码
x = a / b
x = torch.nan_to_num(x, nan=0.0, posinf=0.0, neginf=0.0)

混合精度训练:fp16 容易溢出成 Inf,用它做保护。

数据预处理:清洗含缺失值(NaN)的特征。

相关推荐
2601_958352902 小时前
还要写 AEC 算法?0 代码 + 6 个引脚,F-18 让通话清晰度提升 300%
人工智能·算法·降噪消回音
千里码aicood2 小时前
基于机器学习的雷达低慢小目标识别技术的研究
人工智能·机器学习
llilian_162 小时前
标准时间间隔发生器应用解决方案 脉冲发生器 时间测量仪
大数据·网络·人工智能·功能测试·单片机·嵌入式硬件·51单片机
世岩清上2 小时前
展厅数字内容同质化严重,怎样打造专属叙事风格?
大数据·前端·javascript·人工智能·html·音视频·展厅改造
幻影123!2 小时前
AlphaZero 五子棋实战(一):单卡从零自举,我的v36 最终版配置
人工智能·强化学习·马尔科夫·决策过程
固定资产管理系统软件2 小时前
该去哪里找专业靠谱的智慧智能设备固定资产管理系统?
人工智能·python
具身AGI3 小时前
线缆绳索怎么操控,物理AI 物理推理 的新解法
人工智能
广州山泉婚姻3 小时前
列表初始化:C++11全新初始化体系
c++·人工智能
天涯浪客3 小时前
静态 → LLM → 动态:一条 6 模块流水线,把 Python 漏洞告警噪声压到 4.3%
人工智能