keras 用了ImageDataGenerator(1.0/255)之后的predict和predict_generator预测结果不一致的问题

用keras写图像分类的代码的时候,我们一般使用imagedatagenerator:

ImageDataGenerator(1.0/255)

示例代码:

test_datagen = ImageDataGenerator(1.0/255)
test_data_dir = './data_v1'
IMAGE_SIZE=(128,128)
batch_size = 32
classes=[]
with open("labels.txt","r") as f:
    for line in f.readlines():
        classes.append(line.strip("\n").split("\t")[0])
        
validation_generator = test_datagen.flow_from_directory(
        test_data_dir,
        target_size=IMAGE_SIZE,
        batch_size=batch_size,
        color_mode="grayscale",
        classes=classes,
        shuffle=False,
        class_mode='categorical',
        seed=42)

但是训练完了之后,我们想predict一张图片,然后你会发现,如果不用imagedatagenerator,预测的结果就不一样:

解决方案

mg_path='data_v1/hippo05/2.jpg'
img = load_img(img_path,color_mode="grayscale",target_size=(img_width,img_height),interpolation='nearest')
img_arr=img_to_array(img).astype('float32')


# img_arr /= 255.
img_arr=np.expand_dims(img_arr,axis=0)  
# print(img_arr.shape)
# output=intermediate_layer_model.predict(img_arr)
# print(output)
# print(output.shape)
print(img_arr.shape)
res=test_datagen.flow(img_arr, batch_size=1)
out2=model.predict(img_arr)
print(out2)
idx=np.argmax(out2)
print(idx)

在处理好图片了之后,调用一下image_datagen就可以了,这个感觉是个trick,所以分享出来

你可能感兴趣的:(keras)