对于一个学校项目,我试图使用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 ])
你能帮帮我吗?
谢谢你的帮助!
答案 0 :(得分:0)
通常,这意味着某些东西会收敛到无穷大。正如@desertnaut在评论中指出的那样,降低学习率可能有所帮助。
但问题的根源是您的输入数据。这425个数据点是什么意思?它们来自不同的来源,不同的功能,不同的参数?查找大纲或规范化数据可能会有所帮助。
否则你的代码看起来很好。
答案 1 :(得分:0)
尝试将优化程序更改为' Adam'而不是SGD
答案 2 :(得分:0)
您在变量sgd
中初始化了SGD优化器,但没有在compile
中使用它
答案 3 :(得分:0)
确保您的目标输出在(0,1)范围内,因为最后一层中有S型。
Sigmoid的输出在零和一之间,因此如果目标输出不在此范围内,则(a)更改激活函数或(b)将输出归一化在所需范围内。
确保此模型的目的是回归。
在考虑了以上三点之后,尝试学习率(降低)和优化器(以其他任何值代替)。