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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
from keras import applications from keras.preprocessing.image import ImageDataGenerator from keras import optimizers from keras.models import Sequential, Model from keras.layers import Dropout, Flatten, Dense img_width, img_height = 256, 256 batch_size = 16 epochs = 50 train_data_dir = 'C:/Users/Z-/Desktop/kaggle/train' validation_data_dir = 'C:/Users/Z-/Desktop/kaggle/test1' OUT_CATAGORIES = 1 nb_train_samples = 2000 nb_validation_samples = 100 base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_width, img_height, 3)) base_model.summary() for layer in base_model.layers[:15]: layer.trainable = False top_model = Sequential() top_model.add(Flatten(input_shape=base_model.output_shape[1:])) top_model.add(Dense(256, activation='relu')) top_model.add(Dropout(0.5)) top_model.add(Dense(OUT_CATAGORIES, activation='sigmoid')) model = Model(inputs=base_model.input, outputs=top_model(base_model.output)) model.compile(loss='binary_crossentropy', optimizer=optimizers.SGD(learning_rate=0.0001, momentum=0.9), metrics=['accuracy']) train_datagen = ImageDataGenerator(rescale=1. / 255, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary') validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary', shuffle=False ) model.fit_generator( train_generator, steps_per_epoch=nb_train_samples / batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=nb_validation_samples / batch_size, verbose=2, workers=12 ) score = model.evaluate_generator(validation_generator, nb_validation_samples / batch_size) scores = model.predict_generator(validation_generator, nb_validation_samples / batch_size)看看这段代码有什么错误
最新发布
06-02
在段代码中,有一些错误和需要注意的地方: 1. `img_width` 和 `img_height` 变量没有被定义,需要先定义它们的值。 2. `OUT_CATAGORIES` 变量也没有被定义,需要给它赋值。 3. 在使用 `train_generator` 和 `validation_generator` 时,`steps_per_epoch` 和 `validation_steps` 应该为整数值,而不是浮点数。可以使用 `//` 运算符来进行整除操作。 4. 在评估模型的性能时,`evaluate_generator` 和 `predict_generator` 方法的参数应该是整数值,而不是浮点数。可以使用 `int()` 函数来将浮点数转换为整数。 下面是修改后的代码: ```python from keras import applications from keras.preprocessing.image import ImageDataGenerator from keras import optimizers from keras.models import Sequential, Model from keras.layers import Dropout, Flatten, Dense img_width, img_height = 256, 256 batch_size = 16 epochs = 50 train_data_dir = 'C:/Users/Z-/Desktop/kaggle/train' validation_data_dir = 'C:/Users/Z-/Desktop/kaggle/test1' OUT_CATAGORIES = 1 nb_train_samples = 2000 nb_validation_samples = 100 base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_width, img_height, 3)) base_model.summary() for layer in base_model.layers[:15]: layer.trainable = False top_model = Sequential() top_model.add(Flatten(input_shape=base_model.output_shape[1:])) top_model.add(Dense(256, activation='relu')) top_model.add(Dropout(0.5)) top_model.add(Dense(OUT_CATAGORIES, activation='sigmoid')) model = Model(inputs=base_model.input, outputs=top_model(base_model.output)) model.compile(loss='binary_crossentropy', optimizer=optimizers.SGD(learning_rate=0.0001, momentum=0.9), metrics=['accuracy']) train_datagen = ImageDataGenerator(rescale=1. / 255, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary') validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary', shuffle=False) model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=nb_validation_samples // batch_size, verbose=2, workers=12) score = model.evaluate_generator(validation_generator, int(nb_validation_samples / batch_size)) scores = model.predict_generator(validation_generator, int(nb_validation_samples / batch_size)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值