python - 在尝试用Keras预测时返回nan

时间:2017-12-16 12:01:48

标签: python machine-learning keras

对于一个学校项目,我试图使用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列(维度数)的数据帧。

y_train和y_test看起来像:

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

你能帮帮我吗?

谢谢你的帮助!

4 个答案:

答案 0 :(得分:0)

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

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

否则你的代码看起来很好。

答案 1 :(得分:0)

尝试将优化程序更改为' Adam'而不是SGD

答案 2 :(得分:0)

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

答案 3 :(得分:0)

  • 确保您的目标输出在(0,1)范围内,因为最后一层中有S型。

  • Sigmoid的输出在零和一之间,因此如果目标输出不在此范围内,则(a)更改激活函数或(b)将输出归一化在所需范围内。

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

  • 在考虑了以上三点之后,尝试学习率(降低)和优化器(以其他任何值代替)。