为什么混淆矩阵和模型账户不同

Why Confusion Maxtrix and Model ACC are different

目前,我们正在使用 CNN 构建 Confusion Matrix,这与 Model Acc 不同。

Model ACC92.3% 当 51% 精度是使用 Confusion Matrix.

在这种情况下,Model ACCConfusion Matrix 以下哪项应该正确?

我该如何解决这个问题?

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= 
['accuracy'])
hist = model.fit_generator(train_generator, steps_per_epoch=10, epochs= 20, 
validation_data=test_generator, validation_steps=10 )
#5. Model Evaluate
print("-- Evaluate --")
scores = model.evaluate_generator(test_generator)
print("%s: %.2f%%" %(model.metrics_names[1], scores[1]*100))

# 6.  Make Confusion Matrix
print("-- Predict --")
output = model.predict_generator(test_generator)
print('Counfusion Matrix')
output1 = np.argmax(output,axis=1)
cm1=confusion_matrix(test_generator.classes, output1)
print(cm1)

你肯定做错了什么,我运行在mnsit数据集上做了一个简单的实验,我得到了同样的结果。

# my model loss and metric
model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
# fit model and train
# evaluate model
score = model.evaluate(X_train, Y_train1, verbose=1)
print('Val accuracy by model:', score[1])

from sklearn.metrics import confusion_matrix as cm
pred = model.predict(X_train)
pred_label = [np.argmax(i) for i in pred]
actual_label = [np.argmax(i) for i in Y_train1]

cm1 = cm(pred_label, actual_label)
print('Val accuracy by confusion-metrics:', np.trace(cm1)/Y_train1.shape[0])

查看结果:

Val accuracy by model: 0.9872380952380952
Val accuracy by confusion-metrics: 0.9872380952380952

确保您传递了正确的指标和损失函数。