Ошибка значения: ввод 0 слоя global_average_pooling2d несовместим со слоем: ожидаемый ndim= 4, найденный ndim= 2. Получена полная форма: [Нет, 128]

#python #tensorflow2

#python #tensorflow2

Вопрос:

Я загружаю сохраненную модель и для точной настройки добавляю слои классификации к выходным данным загруженной модели, так что это то, что я пишу :

 def create_keras_model():
    model = tf.keras.models.load_model('model.h5', compile=False)
    resnet_output = model.output
    layer1 = tf.keras.layers.GlobalAveragePooling2D()(resnet_output)
    layer2 = tf.keras.layers.Dense(units=256, use_bias=False, name='nonlinear')(layer1)
    model_output = tf.keras.layers.Dense(units=2, use_bias=False, name='output', activation='relu')(layer2)
    model = tf.keras.Model(model.input, model_output)
    return model
  

но я нахожу эту ошибку:

 ValueError: Input 0 of layer global_average_pooling2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, 128]
  

Может кто-нибудь, пожалуйста, помогите мне и скажите, из-за чего эта ошибка и как я могу решить эту проблему.
Спасибо!

Ответ №1:

Мог бы ответить лучше, если бы у вас была общая model.h5 архитектура или последний слой model.h5 .

В вашем случае входное измерение находится 2 там, где tf.keras.layers.GlobalAveragePooling2D() ожидается входное измерение 4 .

Согласно tf.keras.слои.Документация GlobalAveragePooling2D, tf.keras.слои.Слой GlobalAveragePooling2D ожидает форму ввода ниже —

Введите форму: если data_format='channels_last' : тензор 4D с формой (batch_size, rows, cols, channels) . Если data_format='channels_first' : тензор 4D с формой (batch_size, channels, rows, cols) .

В этом руководстве по tensorflow вы узнаете, как классифицировать изображения кошек и собак, используя обучение передаче из предварительно обученной сети вместе с точной настройкой.