#python #tensorflow #keras
Вопрос:
Я пытаюсь построить классификатор изображений, используя базовую модель из предварительно обученной модели MobileNet V2. Вот код модели:
img_size = (160, 160)
img_shape = img_size (3,)
print(img_shape)
base_model = tf.keras.applications.MobileNetV2(input_shape=img_shape,
include_top=False,
weights='imagenet')
base_model.trainable = False
global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
prediction_layer = tf.keras.layers.Dense(2, activation="softmax")
inputs = tf.keras.Input(shape=img_size (3,))
print("shape",inputs.shape)
x = preprocess_input(inputs)
x = base_model(x, training=False)
x = global_average_layer(x)
x = tf.keras.layers.Dropout(0.2)(x)
outputs = prediction_layer(x)
model = tf.keras.Model(inputs, outputs)
base_learning_rate = 0.0001
model.compile(optimizer=tf.keras.optimizers.Adam(lr=base_learning_rate),
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True))
Но когда я пытаюсь передать ему данные, он выдает следующую ошибку:
ValueError: Input 0 is incompatible with layer model_2: expected shape=(None, 160, 160, 3), found shape=(32, 160, 3)
Я не понимаю, почему я получаю эту ошибку, я изменил форму всех изображений, и если я напечатаю их форму, результат будет:
(160, 160, 3)
Та же форма, которую ожидает модель. Что я упускаю?
Спасибо!
Комментарии:
1. Модель ожидает размер пакета. Вам необходимо выполнить пакетную обработку данных, если вы используете tf.data
Ответ №1:
Ваша модель ожидает ввода формы 4-D, но вы вводите 3-D. Необходимо добавить дополнительное измерение пакета, как указано в комментарии @Frightera .
image = (160, 160, 3)
tf.expand_dims(image, axis=0).shape.as_list()
output:
(1, 160, 160, 3)