webentwicklung-frage-antwort-db.com.de

Keras ValueError: Eingabe ist nicht kompatibel mit Layer conv2d_1: erwartet ndim = 4, gefunden ndim = 5

Ich habe alle Lösungen geprüft, aber ich habe immer noch den gleichen Fehler. Meine Form der Trainingsbilder ist (26721, 32, 32, 1), was meiner Meinung nach 4 Dimensionen ist, aber ich weiß nicht, warum der Fehler zeigt, dass er 5 Dimensionen hat. 

 model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same',
                            input_shape= input_shape ))

So definiere ich also model.fit_generator 

model.fit_generator(train_dataset, train_labels, nb_Epoch=epochs, verbose=1,validation_data=(valid_dataset, valid_labels), nb_val_samples=valid_dataset.shape[0],callbacks=model_callbacks) 

Kann mir bitte jemand dabei helfen? 

2
Lucky

Das Problem ist input_shape

Es sollte eigentlich nur 3 Dimensionen enthalten. Und intern fügen Keras die Chargendimension hinzu, wodurch sie zu 4 wird. 

Da Sie wahrscheinlich input_shape mit 4 Dimensionen (Batch eingeschlossen) verwendet haben, fügt Keras die fünfte hinzu. 

Sie sollten input_shape=(32,32,1) verwenden.

7
Daniel Möller

Hier müssen Sie das "channels_first" immer dann überprüfen, wenn CNN als 2d verwendet wird. Außerdem müssen Sie Ihre train_data und Testdaten umformen als:

if K.image_data_format() == 'channels_first':   #check for channels_first
 train_img.reshape(train_img.shape[0],1,x,x)
 Input_shape=(1,x,x)                            #In your case x is 32
else:
 train_img.reshape(train_img.shape[0],x,x,1)
 Input_shape=(x,x,1)
0
dgamer

Das Problem liegt bei input_shape. Fügen Sie eine zusätzliche Dimension/einen zusätzlichen Kanal hinzu, damit Keras wissen, dass Sie an einem Graustufenbild arbeiten, z. B. -> 1.

input_shape= (56,56,1). Wenn Sie ein normales Deep-Learning-Modell verwenden, wird dies wahrscheinlich kein Problem darstellen, für Convnet jedoch.

0
SANDEEP KUMAR H