keras加载已经训练好的模型文件,进行预测时却发现预测结果几乎为同一类(本人预测时几乎均为为第0类)**

注:本文章为原创,欢迎转载,转载请注明出处

原因:在进行keras训练时候,使用了keras内置的数据读取方式,但是在进行预测时候,使用了自定义的数据读取方式,本人为图片读取。

解决办法查看如下代码:

##############训练:
train_gen = ImageDataGenerator(rotation_range=10,
                               width_shift_range=0.2,
                               shear_range=0.2,
                               zoom_range=0.2,
                               fill_mode='constant',
                               cval=0)
train_generator = train_gen.flow_from_directory(train_path,
                                                target_size=(224, 224),
                                                batch_size=16,
                                                class_mode='categorical',
                                                save_to_dir=train_g,
                                                save_prefix='man',
                                                save_format='jpg')
#############预测
img = cv2.imread(img_path)
img = cv2.resize(img, (row, col))
img = np.expands(img, axis=0)
out = model.predict(img)
# 上述方法是不行的,仔细查看keras内置读取方式,可以观察到内置了load_img方式
# 因此,我们在预测时候,将读取图片的方式改为
from keras.preprocessing.image import load_img, img_to_array
img = load_img(img_path)
img = img_to_array(img, target_size=(row, col))
img = np.expands(img, axis=0)
out = model.predict(img)

:本文意在说明 对训练数据和预测数据的读取、预处理方式上应该在某种程度上保持一致,从而避免训练结果和真实预测结果相差过大的情况。

你可能感兴趣的:(python-深度学习,keras)