2017-01-10 1 views
11

Je veux former un réseau profond à partir de la couche suivante:Erreur lors du contrôle d'entrée du modèle: convolution2d_input_1 devrait avoir 4 dimensions, mais a tableau avec la forme (32, 32, 3)

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

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) 

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

Pendant l'entraînement, je reçois l'erreur:

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

Comment cela peut-être, avec une première couche

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

?

+2

Comment avez-vous résoudre ce problème? –

Répondre

15

La forme d'entrée que vous avez définie est la forme d'un échantillon unique. Le modèle lui-même attend un certain nombre d'échantillons en entrée (même si c'est un tableau de longueur 1).

Votre sortie devrait vraiment être en 4-d, avec la 1ère dimension pour énumérer les échantillons. c'est-à-dire pour une seule image, vous devez retourner une forme de (1, 32, 32, 3).

Vous pouvez trouver plus d'informations here sous « Convolution2D »/« forme d'entrée »

+0

quoi changer? Je recevais une erreur similaire-https: //paste.ubuntu.com/24188374/ –

+0

@AbhishekBhatia Vous devriez changer x_ip_shape de la même manière. – ginge

+9

La modification de la taille de l'entrée entraîne la modification de l'erreur "L'entrée 0 est incompatible avec la couche conv2d_1: attendue ndim = 4, trouvée ndim = 5". Quelqu'un a-t-il de l'aide? – Stormsson