损失:Nan Keras回归

时间:2018-12-05 21:15:21

标签: python tensorflow keras deep-learning linear-regression

我正在尝试预测一个连续值(第一次使用NN)。我已经标准化了输入数据。我不知道为什么从第一个纪元开始得到 loos:nan 输出。我阅读并尝试了以前对同一问题的回答中的许多建议,但没有一个对我有帮助。我的训练数据形状为:(201917,64)

这是我的代码:

model = Sequential()
model.add(Dense(100, input_dim=X.shape[1], activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(100, activation='relu'))

# Output layer
model.add(Dense(1, activation='linear'))

# Construct the neural network inside of TensorFlow
model.compile(loss='mean_squared_error', optimizer='Adam')

# train the model
model.fit(X_train, y_train, epochs=10, batch_size=32,
shuffle=True, verbose=2)

谢谢!

3 个答案:

答案 0 :(得分:1)

NaN 在输入数据框中。在获取数据框值之前,应替换 NaN 值。否则会爆炸渐变。

答案 1 :(得分:0)

简而言之,您可以按照以下步骤查找问题的原因:

  1. 确保您的数据集应该是应该的:

    • 在数据集中查找任何 nan / inf 并进行修复。
    • 编码错误(将其转换为 UTF-8 )。
    • 列或行中的值无效。
  2. 使用 Dropout BatchNormalization L1 / L2 正则化< / strong>,更改您的 batch_size ,或将数据缩放到其他范围(例如 [-1,1] )。

  3. 缩小网络规模。
  4. 更改其他超参数(例如优化器激活功能)。

您可以检查thisthis链接以获得更多帮助。

答案 2 :(得分:0)

有时候,当学习率太高时,人会蒙受损失。一种解决方案是减轻它。

替换此代码:

# Construct the neural network inside of TensorFlow
model.compile(loss='mean_squared_error', optimizer='Adam')

具有:

from keras.optimizers import Adam #maybe put this at the top of your file
opt = Adam(lr=0.0001) #0.001 was the default, so try a smaller one
model.compile(optimizer=opt, loss='mean_squared_error')

查看是否有帮助。我也将首先尝试一个隐藏层,看看它如何进行。