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)的特征。

相关推荐
IT大白鼠7 分钟前
彭大帅的AI运维助手——怎么给AI写运维SOP:提示词设计实战
运维·人工智能·彭大帅
xsd202411185 小时前
3D双目相机 vs 面阵激光雷达:机器人的“眼睛“到底怎么选?
人工智能
2601_965619697 小时前
把开源项目Changelog自动做成更新视频,AI工作流
人工智能·开源·音视频
Json____7 小时前
PHP 突发严重安全漏洞,AI 开始改变网络安全的攻防方式
人工智能·web安全·php·it学习·wwwoop.com
fxss7 小时前
我用AI给娃写了个拼音闯关大冒险
人工智能
驭渊的小故事9 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
北京中科新远科技9 小时前
高速光链路健康检查实战:DOM、FEC、误码与压力回归
人工智能·数据挖掘·回归
火山引擎和TA的超级拍档们9 小时前
超级拍档・光影新生|火山引擎 AIGC 主题峰会回顾
人工智能
冬奇Lab9 小时前
一天一个开源项目(第245篇):Raven —— ‘Harness 的 Harness‘,把 Claude Code、Codex 等智能体编排起来并让它递归自我改进
人工智能·开源·资讯