我正在使用 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% 的准确度时,这根本没有任何意义。我做错了什么?