深度学习模型输出为nan的一个隐蔽可能原因以及如何用pandas解决这个nan问题
2019-05-08 15:28
681 查看
之前搭深度学习模型时,遇到过一个很棘手的问题:
我的模型由三部分组成,前两部分读取某些特征,第三部分(LSTM)读取另外一些特征
当我写好代码开始训练时,预测输出很快就会变成
[nan,
nan,
nan,
…
nan]
上网查了很多相关资料,
总结起来发现大概有这样几个原因:
学习率选取不当
激活函数选取不当
梯度爆炸
…
然后我把第三部分暂时隔离出模型,发现不存在这个问题,这时我意识到可能并非上面的常见原因导致
而且我是用的loss时MSE而不是cross Entropy 似乎不应该出现类似的问题
因为三部分读取不同特征,我开始将注意力转移到我的输入特征中,尤其关注第三部分的输入
经过检查,发现是问题网络的输入中存在隐蔽的NaN值,我在预处理时忽略掉了
#假设你的输入DataFrame的名字时XXX #可以使用下面这个语句来判断输入数据中是否包含隐蔽的Nan XXX.isnull().any() #更加具体地,可以使用下面这个语句来输出具体时哪些列包含nan XXX.isnull()
到这里,我似乎发现了原因,于是,为了验证确实是这个原因造成的,我决定使用pandas处理这些隐蔽的Nan值
使用pandas处理nan
参考以下博客总结
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)#用线性插值法
相关文章推荐
- Failed to generate all binary outputs问题的可能原因以及解决办法!
- Eclipese如何导入项目以及导入后可能出现的问题的解决方法
- 设置了全局钩子,但是发现有的程序钩不到,这个问题可能的一个原因
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- 在很多论坛上看到了有人抱怨Flash CS5中,代码提示(Code hint)有时不显示的问题,这个问题可能有很多原因,我整理了几个解决办法,有可能可以帮助到你~
- 区别对待 【找到问题发生的原因】 以及 【关于这个问题的 「正确可行」 的解决方法】
- Ajax 是什么?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?以及 HTTP状态码
- 如何判断LSTM模型中的过拟合和欠拟合 By 机器之心2017年10月02日 11:09 判断长短期记忆模型在序列预测问题上是否表现良好可能是一件困难的事。也许你会得到一个不错的模型技术得分,但了解
- 使用keras框架训练一个简单的深度学习模型——(一)线性模型解决分类问题
- 如何让滚动条消失,且页面可以正常滚动(解决写选项卡时可能遇见的一个问题)
- 一个ButtonDemo序(遇到的问题,以及在大牛的帮助下,如何解决的。)
- 如何解决QTP与ie兼容性问题?可能有以下几种原因造成。
- 如何解决http请求304问题,304的原因很可能是缓存造成的。
- java.sql.SQLException:Unknown column '****' in 'where clause'错误问题原因以及如何解决?
- 如何为虚拟电脑安装ubuntu系统以及可能出现的问题解决
- 解决json传递到前端时候的乱码问题;以及解决在servlet中如何输出页面的问题
- 搭建tensorflow后如何开始第一个fasterrcnn模型训练以及可能出现的问题
- 如何解决Visual c++不能打开文件以及工程不能添加文件的问题
- 如何解决 html 中多空格字符被当作一个空格字符处理的问题