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?
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.
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)
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.