使用 model.predict_generator()
绘制混淆矩阵时效果很好,而使用 model.predict()
预测单个图像时会给出不同的输出标签。
from sklearn.externals import joblibloaded_model = joblib.load("CNNmodel.pkl")from keras.preprocessing.image import ImageDataGeneratortest_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 plttest_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 buttest_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]。
回答:
test_datagen 使用 rescale=1./255,即它对数据进行归一化。基本上,它将测试集中所有图像乘以 1/255。
当你通过 predict 传递图像时,你没有对其应用这个操作。
尝试
test_image = test_image/255.
然后将其传递给 predict,应该可以正常工作。