web-dev-qa-db-fra.com

Erreur lors de la vérification de l'entrée du modèle: la convolution2d_input_1 attendue doit avoir 4 dimensions, mais le tableau a la forme (32, 32, 3)

Je souhaite former un réseau profond en commençant par la couche suivante:

model = Sequential()
model.add(Conv2D(32, 3, 3, input_shape=(32, 32, 3)))

en utilisant

history = model.fit_generator(get_training_data(),
                samples_per_Epoch=1, nb_Epoch=1,nb_val_samples=5,
                verbose=1,validation_data=get_validation_data()

avec le générateur suivant:

def get_training_data(self):
     while 1:
        for i in range(1,5):
            image = self.X_train[i]
            label = self.Y_train[i]
            yield (image,label)

(le générateur de validation est similaire).

Pendant la formation, j'obtiens l'erreur:

Error when checking model input: expected convolution2d_input_1 to have 4 
dimensions, but got array with shape (32, 32, 3)

Comment est-ce possible, avec une première couche

 model.add(Conv2D(32, 3, 3, input_shape=(32, 32, 3)))

?

51
user1934212

Vous devez simplement appliquer la transformation suivante à votre tableau de données d'entrée.

input_data = input_data.reshape((-1, image_side1, image_side2, channels))
0
codeslord

cela dépend de la façon dont vous commandez réellement vos données, si c'est sur un canal d'abord, vous devez remodeler vos données: x_train = x_train.reshape (x_train.shape [0], canal, largeur, hauteur)

si son canal est le dernier: x_train = s_train.reshape (x_train.shape [0], largeur, hauteur, canal)

0
kenshi123