keras训练出现nan的解决流程

这里出现nan可能是在train的loss阶段,也可能是train的metric阶段,还可能是validation阶段,反正都一样。
在写毕设的过程里面,用学弟提取的特征做DNN的训练,loss没有出现nan,但是反而是metric(MSE)里面出现了nan,predict的结果也全是nan。尝试了很多方法来调bug,最后采用的方法是将训练集二分的方法来调试。

  • 先将训练集划成(0,x),x是训练集的大小,假设x=1000
  • 首先尝试train_df = train_df[0:1000],出现了nan,然后缩减为[0,500],仍然出现问题,然后尝试[0,250],没有出现问题,然后尝试[250,500],以此类推
  • 最后缩减到训练集只有10个样本,保存在csv中,用pandas打开看数据,发现某个特征有inf值
  • 到学弟的代码里面查看该特征编写方法,发现除了一个值A,这个值A有极小概率为0,修改了他的计算方法。

最后总结下出现nan时候的调试方法:

1.第一步:检查训练集里面的特征是否出现Nan值或者Inf值。
2.第二步:如果是自己定义的函数(loss或者metric),检查有没有可能除0或者干脆都在分母加上一个极小值。
3.第三步:换一个优化器,如果没出现问题,可能是网络参数有问题,改小一下lr试试,或者调节下其他参数。

你可能感兴趣的:(Bug调试,编程语言)