Предварительная обработка одного изображения для прогнозирования. (Сборка CNN и обучение с Керасом) - PullRequest
0 голосов
/ 06 июля 2018

Имели недостаток понимания, как сделать единый прогноз с существующей обученной моделью (keras Sequential.

Предварительная обработка и обучение CNN выглядело так: из keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                 target_size=(64, 64),
                                                 batch_size=32,
                                                 class_mode='binary')

test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size=(64, 64),
                                            batch_size=32,
                                            class_mode='binary')

classifier.fit_generator(training_set,
                         steps_per_epoch=8000,
                         epochs=25,
                         validation_data=test_set,
                         validation_steps=2000)

Поскольку не предсказанный генератор не работает, я застрял ...

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
import numpy as np
from keras.preprocessing import image

test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', target_size(64,64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)
result = classifier.predict(test_image)
training_set.class_indices
0 голосов
/ 06 июля 2018

После некоторого поиска в Google я обнаружил, что отдельный образ лучше предварительно обработать с помощью opencv, поэтому обратился к его документации, установленной на Mac через терминал (используя conda).

conda install opencv

Далее в коде пробовал это:

import cv2
import numpy as np

predict_datagen = ImageDataGenerator(rescale=1./255)

img1 = cv2.imread('path_to_image/img_1.jpg')
img1 = cv2.resize(img1, (64, 64))

Зная, что форма ввода изображения модели была (64, 64, 3) после изменения размера, я проверил, совпадает ли форма с

print(img1.shape)

Оказалось, что все было хорошо, поэтому мне нужно было добавить измерение, чтобы соответствовать требованиям модели, что я выяснил после получения ValueError:

ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (64, 64, 3)

Итак, изображение было изменено:

img1 = np.array(img1).reshape((1, 64, 64, 3))#do not miss the order in tuple

После этого я получил изображение необходимой формы и размера и готово к единственному предсказанию с помощью метода predict.

...