Keras 的准确性不匹配

数据挖掘 深度学习 喀拉斯
2022-03-03 14:09:03

我正在使用 Keras 对图像进行分类。我正在关注Keras 博客predict_generator 的准确度与我使用 scikit-learn 包计算的混淆矩阵的准确度不匹配。我在下面包含了相关的代码片段

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
import numpy as np
import theano
from sklearn.metrics import classification_report, confusion_matrix
y_actual = np.ones((nb_test_samples),dtype = int)
y_actual[0:2817] = 0

train_datagen = ImageDataGenerator(
             featurewise_std_normalization=False,
             samplewise_std_normalization=False,
     rescale = 1./255)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
                    train_data_dir,
                    target_size = (img_width,img_height),
                    batch_size = 32,
                    class_mode = 'binary')

test_generator = test_datagen.flow_from_directory(
            test_data_dir,
                    target_size = (img_width,img_height),
                    batch_size = 32,
            class_mode = 'binary',
            shuffle = False         )

model.fit_generator(
                    train_generator,
                    samples_per_epoch = nb_train_samples,
                    nb_epoch = nb_epoch,
                    validation_data = test_generator,
                    nb_val_samples = nb_test_samples)

score =   model.evaluate_generator(
                      test_generator,
                      4938)
print "Test fraction correct (Accuracy) = {:.2f}".format(score[1])
prediction = model.predict_generator(test_generator,nb_test_samples)

for i in xrange(0,len(prediction)):
    if prediction[i]<0.5:
       prediction[i] = 0
    else:
       prediction[i] = 1

#y_predicted = test_generator.classes
print np.sum(prediction)
CM = confusion_matrix(y_actual,prediction)
print CM 

如果我使用 y_predicted,我会得到一个完美的对角混淆矩阵,当控制台输出显示 70% 的准确度时,这根本没有任何意义。我做错了什么?

1个回答

keras 中使用的 score 方法does not计算准确率,如 sklearn 的accuracy_score方法。检查评估方法的内部实现以了解更多信息。如果你想计算准确率,我建议你通过获取预测来使用sklearn的accuracy_score,或者手动计算它是否更容易。