Моя цель: Загрузить мою предварительно обученную модель и предсказать вероятность одного изображения.
Я работаю с keras 2.2.4, tenorflow 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]]
Итак, как правильно изменить первый код на второй, чтобы получить ожидаемые результаты?