问题:
运行模型输出loss值为NAN,训练200次后未出现线性模型
nan
nan的数据类型为float, not a number 的缩写。python中判断是否为nan类型的方法,使用math库中的*isnan()*函数判断:
from math import isnan
import numpy as np
res = np.nan
print (isnan(res))
无法确定运算结果时会返回nan结果.
回到问题本身:
bug出现在交叉熵损失函数的计算中:
sum_err -= Y[i]*np.log(Y_[i])+(1-Y[i])*np.log(1-Y_[i]
其中Y[i]为真值,Y_[i]为对应数据的预测值。
将np.log(Y_[i])打印出来发现类型为 -inf:负无穷大
发现在数据归一化过程中,
Xmin = X.min(0)# 每列的最小值,输出行为1列为2的数组 # 通过使用 np.min 函数,计算原始数据沿着 axis=0 方向的最小值,即:求每一列的最小值,并赋值给 Xmin
Xmax = X.max(0)# 通过使用 np.max 函数,计算原始数据沿着 axis=0 方向的最大