You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras/TensorFlow训练时inf及超大值处理异常问题求助

解决Keras/TensorFlow训练中数据超大值导致的归一化错误

问题根源

你之前的代码只替换了np.inf(无限大)和-np.inf(无限小),但数据中存在的是超过np.float64最大有限值的数值——这类值是有限数,只是超出了float64能表示的上限,不属于inf范畴,所以不会被replace([np.inf, -np.inf], np.nan)处理。

当你尝试转float32时,这些超大值会因为溢出被转换为inf,触发ValueError;归一化时(比如计算均值、极值),超大值会导致计算结果异常,甚至直接溢出成inf,引发训练异常。

处理方案

1. 直接识别并移除超大值

先定位所有超出float64取值范围的数值,替换为nan后再清理:

import numpy as np

float64_max = np.finfo(np.float64).max
float64_min = np.finfo(np.float64).min

# 替换超出范围的值为nan
Data[Data > float64_max] = np.nan
Data[Data < float64_min] = np.nan

# 再执行原本的inf替换和空值清理
Data.replace([np.inf, -np.inf], np.nan, inplace=True)
Data.dropna(inplace=True)

2. 分位数截断(更稳健)

如果超大值是极端异常值,建议用分位数截断,保留大部分合理数据:

# 对每个特征,截断到0.1%和99.9%分位数区间
for col in Data.columns:
    q_low = Data[col].quantile(0.001)
    q_high = Data[col].quantile(0.999)
    # 保留区间内的数据
    Data = Data[(Data[col] >= q_low) & (Data[col] <= q_high)]

3. 预处理后验证

处理完成后,可通过以下代码确认数据无异常:

# 检查是否还有inf或超出范围的值
print(np.any(np.isinf(Data)))
print(np.any(Data > float64_max))
print(np.any(Data < float64_min))

确认无异常后,再执行转float32和归一化操作即可。


内容的提问来源于stack exchange,提问作者Aurepilous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:27:25