Прогнозирование одного изображения PNG с использованием обученной модели TensorFlow - PullRequest
2 голосов
/ 08 мая 2020
import tensorflow as tf
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape = (28,28)),
    tf.keras.layers.Dense(128, activation = 'relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10)
]) 

Это код модели, которую я обучил с помощью набора данных mnist. Что я хочу сделать, так это передать изображение PNG 28x28 методу pred (), который не работает. Код для прогноза:

img = imageio.imread('image_0.png')
prediction = model.predict(img, batch_size = 1)

, что вызывает ошибку

ValueError: Error when checking input: expected flatten_input to have shape (28, 28) but got array with shape (28, 3)

Я застрял в этой проблеме несколько дней, но не могу найти правильный способ передать изображение в метод прогнозирования. Любая помощь?

1 Ответ

1 голос
/ 09 мая 2020

Функция Predict делает прогнозы для серии изображений. Вы должны включить пакетное измерение (первое измерение) в свой img, даже для прогнозирования одного примера. Вам нужно что-то вроде этого:

img = imageio.imread('image_0.png')
img = np.expand_dims(img, axis=0)
prediction = model.predict(img)

Как говорит @desertnaut, похоже, вы используете изображение RGB, поэтому ваш первый слой должен использовать input_shape = (28,28,3) . Следовательно, img параметр функции прогнозирования должен иметь форму (1,28,28,3).

В вашем случае параметр img функции прогнозирования имеет (28 , 28,3), поэтому функция прогнозирования приняла первое измерение как количество изображений и не смогла сопоставить два других измерения с input_shape первого слоя.

...