具有3个输出的Keras回归模型仅给出一个的准确结果

时间:2019-04-09 15:28:54

标签: python keras deep-learning regression

我正在尝试使用python中的keras运行神经网络,该神经网络具有输入2值和输出3。输入表示固有频率,而输出表示等效的冰负荷。问题在于模型完成训练后,似乎仅针对预测一个输入而不是三个输入进行训练。该模型是回归模型,而不是分类模型。在这里,我展示我的代码

seed = 9
np.random.seed(seed)
# import dataset
dataset=np.loadtxt("Final_test_matrix_new_3_digits.csv", delimiter=",")
# Define dataset
Y=dataset[:, 0:3]
X=dataset[:, 3:5]
#Categorize data
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.3, 
random_state = seed)
# create model
model = Sequential()
model.add(Dense(12, input_dim=2,activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(3, init='uniform', activation='relu'))
# compile the model
model.compile(loss='mean_squared_logarithmic_error', optimizer='adam', 
metrics=['accuracy'])
# checkpoint
filepath="weights.best_12_8_8_neurons.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, 
save_best_only=True, mode='max')
callbacks_list = [checkpoint]
# fit the model
history=model.fit(X_train, Y_train, validation_split=0.1, epochs=100000, 
batch_size=10,callbacks=callbacks_list)
# evaluate the model
scores = model.evaluate(X_test, Y_test)
print ("Accuracy: %.2f%%" %(scores[1]*100))

根据python,模型的精度为65%,但这并不影响输出的精度,因为第二个输出的精度低于第一个输出,而第三个输出的精度为几乎为0。创建回归模型的代码的主要目标,在该模型中所有输出将具有相同的精度。在下面的模型精度中,分别显示了模型损失和每个输出的预测:Model loss model accuracy Output 1 prediction Output 2 prediction Output 3 prediction

1 个答案:

答案 0 :(得分:0)

像“随机森林”这样的外观更适合您的情况。您应该尝试一下,特别是在班级不平衡的情况下。

作为一种解决方法,您可以增加Dense(8)层中的节点数,具体取决于数据的差异。

然后,您必须检查少数派类别并改编以下代码(综合少数派过度采样技术):

from imblearn.over_sampling import SMOTE

sm = SMOTE()
x_train2, y_train2 = sm.fit_sample(X_train, Y_train)

请注意,此代码仅适用于二进制输出,因此您应该对3个类进行一次热编码,然后将其应用为0类和1类,然后应用0类和2类,从零类中去除两倍的过采样。然后运行神经网络模型,将validation_split增加到0.2。