用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,所以分享出来