python - Predict.model() 总是返回错误的预测
问题描述
我的目标:加载我的预训练模型并预测单个图像的概率。
我使用 keras 2.2.4、tensorflow 1.12 和 python 3.5。
我已经使用 ImageDataGenerator() 为测试和验证集训练了模型。然后,我使用了 flow_from_directory() 和 fit_generator()。
当我想在另一个测试集中评估模型时,我使用 ImageDataGenerator() 和 flow_from_directory()。model.predict_generator() 给了我我想要的预测,没有问题。代码是这样的:
def evaluate_my_model(test_dir, BATCH_SIZE = 100, image_size=(175, 100)):
Test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input, samplewise_center=True,samplewise_std_normalization=True, horizontal_flip=True,fill_mode='nearest')
# Create a generator for prediction
Test_datagen = Test_datagen.flow_from_directory(test_dir,target_size=image_size, batch_size=BATCH_SIZE, class_mode='categorical', shuffle=False)
# Get the predictions from the model using the generator
_Score_predictions = model.predict_generator(Test_datagen, steps=Test_datagen.samples / Test_datagen.batch_size, verbose=0)
print(_Score_predictions)
return _Score_predictions
MODEL_FILE = "/path/to/model/model.hdf5"
img_dir = "Path/to/images"
imgs = os.listdir(img_dir)
model = load_model(MODEL_FILE)
Score_predictions = evaluate_my_model(test_dir=img_dir, BATCH_SIZE=100, image_size=(175, 100))
我的问题: 当我想使用经过训练的模型来预测单个图像时,model.predict() 总是返回其中一个类(我正在进行二进制分类)。我的代码如下:
MODEL_FILE = "/path/to/model/model.hdf5"
img_dir = "Path/to/images"
imgs = os.listdir(img_dir)
model = load_model(MODEL_FILE)
model.summary()
for i, img in enumerate(imgs):
img = Image.open(img_dir+"/"+img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)
print(preds)
代码结果:
[[0. 1.]]
[[0. 1.]]
[[0. 1.]]
[[0. 1.]]
[[0. 1.]]
.
.
.
【预期结果】:是我使用model.predict_generator()时的结果:
[[9.9975806e-01 2.4502163e-04]
[1.1084620e-02 9.8872340e-01]
[4.5869681e-05 9.9995399e-01]
...
[6.5532902e-07 9.9999928e-01]
[2.5114167e-07 9.9999976e-01]
[9.5047617e-01 4.8345935e-02]]
那么,如何正确地将第一个代码更改为第二个代码以接收预期结果?
解决方案
我意识到问题出在哪里。我把我的答案放在这里也许它可以帮助其他人解决同样的问题。
在训练时from keras.applications.resnet50 import preprocess_input
,我错误地使用from keras.applications.inception_v3 import InceptionV3, preprocess_input
了评估我的模型。
推荐阅读
- java - 重新启动应用程序时保存布尔状态
- docker - 让 docker 容器成为 jenkins 的构建执行器
- kubernetes - 如何从 Kubernetes 中的 Secret 挂载单个文件?
- javascript - 使用 php 值提交
- php - 如何将多个文件名发送到数据库并将文件移动到文件夹?代码点火器
- ios - NSLinguisticTagger:根据标签类型过滤掉指定的标记
- javascript - 我的 if 和 else 语句总是认为它是 -and
- mongodb - mongodb聚合,对象中的groupby列表
- angular - 为什么 Angular input [value] = "function()" 运行多次?
- bash - bash 中的问题