您的位置:首页 > 其它

深度学习模型输出为nan的一个隐蔽可能原因以及如何用pandas解决这个nan问题

2019-05-08 15:28 681 查看

之前搭深度学习模型时,遇到过一个很棘手的问题:
我的模型由三部分组成,前两部分读取某些特征,第三部分(LSTM)读取另外一些特征

当我写好代码开始训练时,预测输出很快就会变成
[nan,
nan,
nan,

nan]

上网查了很多相关资料,

https://www.cnblogs.com/bonelee/p/8603750.html

总结起来发现大概有这样几个原因:
学习率选取不当
激活函数选取不当
梯度爆炸

然后我把第三部分暂时隔离出模型,发现不存在这个问题,这时我意识到可能并非上面的常见原因导致
而且我是用的loss时MSE而不是cross Entropy 似乎不应该出现类似的问题
因为三部分读取不同特征,我开始将注意力转移到我的输入特征中,尤其关注第三部分的输入

经过检查,发现是问题网络的输入中存在隐蔽的NaN值,我在预处理时忽略掉了

#假设你的输入DataFrame的名字时XXX
#可以使用下面这个语句来判断输入数据中是否包含隐蔽的Nan
XXX.isnull().any()
#更加具体地,可以使用下面这个语句来输出具体时哪些列包含nan
XXX.isnull()

到这里,我似乎发现了原因,于是,为了验证确实是这个原因造成的,我决定使用pandas处理这些隐蔽的Nan值

使用pandas处理nan

参考以下博客总结

https://blog.csdn.net/Tyro_java/article/details/81396000

XXX = XXX.dropna(axis = 1)#axis=1为列 =0为行
XXX = XXX.fillna(method = 'ffill', axis = 1)#用列上一个值填充
XXX = XXX.fillna(method = 'backfill', axis = 0)#用下一个
XXX = XXX.interpolate(method = 'linear', axis = 1)#用线性插值法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐