#tensorflow #machine-learning #keras #deep-learning #conv-neural-network
Вопрос:
Я хотел протестировать свою модель, загрузив изображение, но получил эту ошибку. И я думаю, что где-то в этих строках у меня ошибка, я просто не знаю, как ее исправить.
IMAGE_SIZE = [244,720]
inception = InceptionV3(input_shape=IMAGE_SIZE [3], weights='imagenet',include_top=False)
Также вот код загрузки моего тестового изображения
picture = image.load_img('/content/DSC_0365.JPG', target_size=(244,720))
img = img_to_array(picture)
prediction = model.predict(img)
print (prediction)
Я все еще новичок в машинном обучении, поэтому мои знания сейчас еще не настолько глубоки.
Ответ №1:
В основном это связано с тем, что вы не подготовили свои входные данные (их размер) для своей исходной модели. Вот одно из возможных решений.
Модель
from tensorflow.keras.applications import *
IMAGE_SIZE = [244,720]
inception = InceptionV3(input_shape=IMAGE_SIZE [3],
weights='imagenet', include_top=False)
# check it's input shape
inception.input_shape
(None, 244, 720, 3)
Вывод
Давайте протестируем образец, передав его модели.
from PIL import Image
a = Image.open('/content/1.png').convert('RGB')
display(a)
Проверьте его основные свойства.
a.mode, a.size, a.format
('RGB', (297, 308), None)
Итак, его форма уже в ( 297 x 308 x 3
). Но чтобы передать его в модель, нам нужна дополнительная ось, которая является осью пакета. Для этого мы можем сделать
import tensorflow as tf
import numpy as np
a = tf.expand_dims(np.array(a), axis=0)
a.shape
TensorShape([1, 308, 297, 3])
Гораздо лучше. Теперь мы, возможно, захотим нормализовать наши данные и изменить их размер в соответствии с формой ввода модели. Для этого мы можем сделать:
a = tf.divide(a, 255)
a = tf.image.resize(a, [244,720])
a.shape
TensorShape([1, 244, 720, 3])
И, наконец, передайте его модели.
inception(a).shape
TensorShape([1, 6, 21, 2048])
# or, preserve the prediction to later analysis
y_pred = inception(a)
Обновленный
Если вы используете [tf.keras]
функцию обработки изображений, которая загружает изображение в формат PIL, то мы можем сделать просто:
image = tf.keras.preprocessing.image.load_img('/content/1.png',
target_size=(244,720))
input_arr = tf.keras.preprocessing.image.img_to_array(image)
input_arr = np.array([input_arr]) # Convert single image to a batch.
inception(input_arr).shape
TensorShape([1, 6, 21, 2048])
Комментарии:
1. Спасибо, сэр! Я отредактирую свой код и обновлю вас после того, как получу результаты.
2. Это сработало. 🙂 Но чтобы добавить, как я могу вставить это изображение с измененным размером в свой код для прогнозирования изображения (код указан в моем обновленном посте)?
3. картинка = изображение.load_img(‘/content/DSC_0365.JPG’, target_size=(244 720)) img = img_to_array(изображение) прогноз = модель.прогноз(img) печать (прогноз)
4. это был мой предыдущий код. Как я могу вставить туда изображение с измененным размером?
5. Оооо, ух ты, я вижу. Спасибо, сэр! Проблема решена. Я ценю ваши усилия, больше энергии! Хорошего вам дня!