model.predict_generator()和model.predict()在多类别分类中提供了不同的输出标签?

时间:2019-07-18 14:02:22

标签: opencv machine-learning deep-learning conv-neural-network handwriting-recognition

使用model.predict_generator()绘制混淆矩阵可获得良好的结果,而使用model.predict()预测单个图像可获得不同的输出标签。

from sklearn.externals import joblib
loaded_model = joblib.load("CNNmodel.pkl")

from keras.preprocessing.image import ImageDataGenerator
test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
        'dataset/Test',
        target_size=(28, 28),
        batch_size=32,shuffle=False,
        color_mode='grayscale',
        class_mode='categorical')
import matplotlib.pyplot as plt
test_set.reset() 
Y_pred = loaded_model.predict_generator(test_set,4930 // 32+1)
y_pred = np.argmax(Y_pred,axis=-1)
s=confusion_matrix(test_set.classes,y_pred)

this gives good confusion matrix result but

test_image=image.load_img('dataset/Test/character_1_ka/017_02.jpg',target_size=(28,28),color_mode='grayscale')
test_image=image.img_to_array(test_image)
test_image=np.expand_dims(test_image,axis=0)
result=loaded_model.predict(test_image)

在预测单个图像时,不会预测predict_generator提供的结果。它为所有图像预测相同的输出。单个图像预测为不同图像给出相同的输出标签[43]。

1 个答案:

答案 0 :(得分:0)

test_datagen使用 rescale = 1. / 255 ,即将数据标准化。基本上,它将1/255乘以测试集中的所有图像。

在通过预测时尚未将其应用于图像。

尝试

test_image  = test_image/255. 

然后通过它来预测,它应该可以正常工作。