问题
在用Keras搭建模型训练过程中,遇到了训练了几个batch之后网络中间层的输出出现了nan,基本确定是某除零操作导致,想打印前馈出现nan的样本分析
分析
第一反应是使用.any()函数判断有无nan存在,发现无效,原因是.any()和.all()函数只能判断可以转化为True或False的值,而nan既不等于True也不等于False
google之后发现可以利用nan不等于自身的特性来将问题转化:
>>>np.nan == np.nan
False
>>>np.nan != np.nan
True
所以对于要检验的数组(Tensor)test:
if np.sum(test!=test) != 0:
print 'nan is in test' ###test中存在nan
对于上面的sum()函数也可以用.any()来代替,即出现了True的项(自己不等于自己的值,即nan)