4

Ich habe alle ähnlichen Beiträge überprüft, aber mein Fehler wird nicht mit den vorgeschlagenen Fixes behoben. Vielen Dank im Voraus für jede Hilfe!Keras Faltungsform hat Dimensionen außerhalb der Reihenfolge (Fehler beim Überprüfen der Modelleingabe)

Ich verwende ein Tensorflow-Backend mit Keras, und meine Bilder haben Abmessungen 1185 x 676. Der meiste Code stammt aus einem der Keras-Beispiele.

Ich bekomme ValueError: Negative dimension size caused by subtracting 2 from 1 for 'MaxPool' (op: 'MaxPool') with input shapes: [?,1,1183,32]. Dieser Fehler verschwindet, wenn ich auf dim_ordering = "th", was ungerade ist, wenn ich bedenke, dass ich Tensorflow, nicht Theano verwende.

Der Code bis zu diesem Punkt:

img_width, img_height = 1185, 676 

train_data_dir = 'data/train' 
validation_data_dir = 'data/validation' 
nb_train_samples = 32 
nb_validation_samples = 8 
nb_epoch = 3 

model = Sequential() 
model.add(Convolution2D(32, 3, 3, input_shape=(3, img_width, img_height))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="tf")) 

Und falls ein Teil des Problems der Datengenerierung ist:

model.compile(loss='binary_crossentropy', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 

train_datagen = ImageDataGenerator(
     rescale=1./255, 
     shear_range=0.2, 
     zoom_range=0.2, 
     horizontal_flip=True) 

test_datagen = ImageDataGenerator(rescale=1./255) 

train_generator = train_datagen.flow_from_directory(
     train_data_dir, 
     batch_size=4, 
     target_size=(img_width, img_height), 
     class_mode='binary') 

validation_generator = test_datagen.flow_from_directory(
     validation_data_dir, 
     batch_size=4, 
     target_size=(img_width, img_height), 
     class_mode='binary') 

model.fit_generator(
     train_generator, 
     samples_per_epoch=nb_train_samples, 
     nb_epoch=nb_epoch, 
     validation_data=validation_generator, 
     nb_val_samples=nb_validation_samples) 
+0

Update: Es sieht aus wie die Abmessungen nicht teilbar durch die Pool-Größe waren. Jetzt bekomme ich 'ValueError: Negative Dimensionsgröße durch Subtraktion von 3 von 1 für 'Conv2D' (op: 'Conv2D') mit Eingabeformen: [?, 1.1185.676], [3,3,676,32 ] .' –

+0

Aktualisierung: Die Poolgrößen wurden korrigiert. Jetzt , bei der Montage: 'Valueerror: Fehler bei der Überprüfung Modelleingang: erwartete convolution2d_input_1 Form zu haben (None, 3, 1185, 676), aber bekam Array mit Form (2, 1185, 676, 3)' –

+0

Ihre Eingabe Form ist nicht konsistent mit image_ordering = "tf", warum erzwingen Sie eine Bildordnung in nur einer Ebene? –

Antwort

2

Die Bilddimension Bestellung in Ihrem Code gemischt wurde. Mehrfache Möglichkeit, dies zu beheben.

Eine Möglichkeit ist

from keras import backend as K 
K.set_image_dim_ordering('tf') 

am Anfang des Codes hinzuzufügen.

Andere Ansätze sind in this answer zusammengefasst

+1

Danke! Ich würde für Ihre Antwort stimmen, aber ich habe noch nicht genug Ansehen für die Wahl. <3 –

+1

Kein Problem, solange es geholfen hat. – pyan

Verwandte Themen