Вход 0 слоя fc1 несовместим со слоем: ожидаемая ось -1 входной формы должна иметь значение 25088, но полученный вход с формой (нет, 32768)

#tensorflow #keras #feature-extraction #vgg-net #pre-trained-model

Вопрос:

Я внедряю SRGAN (и у меня не очень большой опыт в этой области), который использует предварительно обученную модель VGG19 для извлечения функций. Следующий код отлично работал на Keras 2.1.2 и tf 1.15.0 до вчерашнего дня. затем в него начали кидать в «AttributeError: модуль ‘водоснабжении.утилиты.generic_utils’ не имеет атрибута ‘populate_dict_with_module_objects’» так как я обновил водоснабжении версию 2.4.3 и TF до 2.5.0. но тут его показывать «вход 0 несовместим со слоем из слоя fс1: ожидается оси -1 ввода формы, чтобы иметь значение 25088, но получил ввод с формы (none, 32768)» на следующую строку

 features = vgg(input_layer) 

Но здесь ввод должен быть (256,256,3).
Я понизил версии keras и tf до той, о которой я упоминал ранее, чтобы в первую очередь избавиться от этой ошибки, и до вчерашнего дня она работала хорошо.
изменение формы ввода на (224,224,3) не работает. Любая помощь в устранении этой ошибки будет очень признательна.

 import glob
import time

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import keras
from keras.layers import Input
from keras.applications.vgg19 import VGG19
from keras.callbacks import TensorBoard
from keras.layers import BatchNormalization, Activation, LeakyReLU, Add, Dense,Flatten
from keras.layers.convolutional import Conv2D, UpSampling2D
from keras.models import Model
from keras.optimizers import Adam
from scipy.misc import imread, imresize
from PIL import Image 
 def build_vgg():
   
   
    input_shape = (256, 256, 3)
    vgg = VGG19(weights="imagenet")
    vgg.outputs = [vgg.layers[9].output]
    input_layer = Input(shape=input_shape)
    features = vgg(input_layer)    
    model = Model(inputs=[input_layer], outputs=[features])
    return model 
 vgg = build_vgg()
vgg.trainable = False
vgg.compile(loss='mse', optimizer=common_optimizer, metrics=['accuracy'])

# Build and compile the discriminator
discriminator = build_discriminator()
discriminator.compile(loss='mse', optimizer=common_optimizer, metrics=['accuracy'])

# Build the generator network
generator = build_generator() 

Сообщение об ошибке

Я использую google colab

Ответ №1:

Импорт keras from tensorflow и настройка include_top=False в

 vgg = VGG19(weights="imagenet",include_top=False)
 

кажется, это работает.