Keras Sequential模型训练loss、val_loss及预测结果均为NaN问题排查
Keras训练loss/准确率全为NaN问题修复方案
问题根本原因
模型训练、预测全输出NaN的核心诱因是训练数据集的目标列存在未被清理的空值:
代码执行顺序错误,先运行datas.dropna(inplace=True)清理全表空值,后运行datas['target'] = datas['close'].shift(-4)生成目标列,shift(-4)操作会将数据集最后4行的target值自动置为NaN,后续没有再次做空值清理,NaN值传入模型后直接导致训练流程失效。
修复方案
- 调整代码执行顺序,先生成目标列,再做全局空值清理,示例代码如下:
# 1. 先生成移位目标列 datas['target'] = datas['close'].shift(-4) # 2. 再统一清理全表所有空值,包含target列最后4行的NaN datas.dropna(inplace=True)
- 空值清理后增加校验步骤,确认数据集无空值后再传入模型:
# 校验全表是否存在空值,返回True则符合训练要求 print(datas.isna().any().any() == False)
- 若不需要全表清理空值,也可单独删除target列为空的行,最大化保留训练数据:
datas = datas[datas['target'].notna()]
内容的提问来源于stack exchange,提问作者Björn
相关产品推荐
相关产品推荐

