Ошибка значения: Ввод 0 несовместим с моделью слоя_2: ожидаемая форма=(Нет, 160, 160, 3), найденная форма=(32, 160, 3)

#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)