【问题标题】:python - returning nan when trying to predict with Keraspython - 尝试使用 Keras 进行预测时返回 nan
【发布时间】:2018-05-30 10:29:53
【问题描述】:

对于一个学校项目,我正在尝试使用 keras 框架预测数据,但是当我尝试获取预测数据时,它会返回“nan”损失和值。

源代码:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=5)

# create model
model = Sequential()
model.add(Dense(950, input_shape=(425,), activation='relu'))
model.add(Dense(425, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Compile model
sgd = optimizers.SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer='sgd')

# Fit the model
model.fit(X_train, y_train, epochs=20, batch_size=1, verbose=1)

#evaluate the model
y_pred = model.predict(X_test)

score = model.evaluate(X_test, y_test,verbose=1)
print(score)

# calculate predictions
predictions = model.predict(X_pred)

数据:

X_train 和 X_test 是 5000 行(样本数)* 425 列(维数)的 (panda) 数据帧。

y_train 和 y_test 看起来像:

array([ 1.17899644,  1.46080518,  0.9662137 , ...,  2.40157461,
        0.53870386,  1.3192718 ])

你能帮我吗?

感谢您的帮助!

【问题讨论】:

  • 尝试将 SGD 学习率降低到 0.01
  • 您创建一个 sgd 对象,然后传递一个“sgd”字符串作为优化器。什么?!

标签: python machine-learning keras


【解决方案1】:

通常,这意味着某些东西会收敛到无穷大。正如@desertnaut 在评论中指出的那样,降低学习率可能会有所帮助。

但问题的根源在于您的输入数据。这 425 个数据点是什么意思?它们是否来自不同的来源、不同的特征、不同的参数?寻找大纲或规范化数据可能会有所帮助。

否则您的代码看起来不错。

【讨论】:

    【解决方案2】:
    • 确保您的目标输出在 (0, 1) 范围内,因为您在最后一层有 sigmoid。

    • sigmoid 的输出介于 0 和 1 之间,因此如果目标输出不在此范围内,则 (a) 更改激活函数或 (b) 在所需范围内标准化输出。

    • 确保此模型的目的是回归。

    • 在考虑了以上三点之后,玩转学习率(降低)和优化器(替换为任何其他)。

    【讨论】:

      【解决方案3】:

      尝试将优化器更改为“Adam”而不是 SGD

      【讨论】:

        【解决方案4】:

        您在变量 sgd 中初始化了 SGD 优化器,但您没有在 compile 中使用它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-07
          • 2017-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-24
          • 1970-01-01
          • 2021-08-29
          相关资源
          最近更新 更多