MAE 和 MSE 是神经网络回归的 Nan?

数据挖掘 Python 神经网络 喀拉斯 回归
2022-02-05 13:33:06

我为回归做了一个简单的神经网络,我没有得到任何错误,但 MSE 和 MAE 是 Nan。代码是:

dataset = pd.read_excel('data_Z.xlsx')
#df = pd.DataFrame(stock, columns= ['X1', 'X2', 'X3', 'X4', 'X5', 'Y1', 
'Y2'])


#Variables
x=dataset.iloc[:,0:5]
y=dataset.iloc[:,5].values
y=y.reshape (-1,1)
scaler = MinMaxScaler()
print(scaler.fit(x))
print(scaler.fit(y))
xscale=scaler.transform(x)
yscale=scaler.transform(y)
X_train, X_test, y_train, y_test = train_test_split(xscale, yscale)
model = Sequential()
model.add(Dense(12, input_dim=5, kernel_initializer='normal', 
activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='linear'))
model.summary()

model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(X_train, y_train, epochs=150, batch_size=50,  verbose=1, 
 validation_split=0.2)

我不明白为什么?

2个回答

可能性:

  1. 您的数据集中缺少值。
  2. 您正在通过缩放引入缺失值。(特别是,是否有任何特征保持不变?而且您似乎在滥用缩放器: fit 方法从数据中设置最大值和最小值,因此在fit(x)之后立即运行fit(y)可能不是您的本意。)
  3. 如果以上都不是问题,那么大概是 Keras 引入了问题。这很难诊断,但通常似乎来自消失/爆炸梯度?你是从一开始就得到真正的分数,还是从训练一开始就得到 NaN?另请参阅https://stackoverflow.com/questions/37232782/nan-loss-when-training-regression-network 及其相关问题。

当我的规范化“关闭”时,我曾经遇到过同样的问题。我得到了所有损失函数的 Nans。这是我要做的:

  • 要么放弃scaler.fit(y),只做yscale=scaler.transform(y)OR
  • 和有两个不同的定标xy

特别是如果您的值与您的y值在一个非常不同的数字范围内x然后归一化是“关闭”的x