我需要这方面的帮助,我使用keras分类器的问题是我得到了高精度但非常糟糕的预测与相同的数据,预测类应该是0,1,2,3,3,4,0。但我得到全零,这是我的代码
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
model = Sequential()
model.add(Dense(units=14, activation='relu', input_shape=(14,)))
model.add(Dropout(0.5))
model.add(Dense(units=14, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=14, activation='relu'))
model.add(Dense(units=5, activation='sigmoid'))
#model.add(Dense(units=5, activation='relu'))
#monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=5, verbose=0, mode='auto')
#checkpointer = ModelCheckpoint(filepath="best_weights.hdf5", verbose=0, save_best_only=True) # save best model
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.001, nesterov=True)
model.compile(optimizer=sgd,
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_vals_train,y_train,validation_data=(x_vals_test,y_test),verbose=0,epochs=10)
#Evaluate the accuracy of our trained model
score = model.evaluate(x_vals_test, y_test,
batch_size=32, verbose=1)
print('Test score:', score[0])
print('Test accuracy:', score[1])
27134/27134 [==============================] - 1s 29us/step
Test score: 0.10602876026708943
Test accuracy: 0.9448293653718581
the predition
testset = np.loadtxt('G:/project/test.pcap_z/all_data_amount_7.csv', delimiter=',')
xtest = testset[:,0:14]
#x_test1 = np.nan_to_num(normalize_cols(xtest))
y_pred = model.predict(x_test1)
y_pred =y_pred.astype(int)
y_pred
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
请,任何帮助将非常感谢。
答案 0 :(得分:1)
对于分类,您应该使用单热矢量作为y和softmax激活作为神经网络中的最后一层。
要将您的y转换为单热格式:
from keras.np_utils import to_categorical
y = to_categorical(y)
使用softmax激活添加另一个Dense图层:
model.add(Dense(num_classes, activation='softmax'))
现在不输出严格的类,而是输出每个类概率的向量。要检索预测,您可以对输出的向量使用np.argmax()
,这将获得具有最高概率的类。
答案 1 :(得分:0)
可能是 y_pred = y_pred.astype(int)
删除了所有数据,因为当 float
变成 int
时,它总是向下取整。