2017-02-22 3 views
1

I keras model.fit_generator() zu verwenden, ich versuche, ein Modell zu passen, ist unten meine Definition des Generators:keras Modell fit_generator Valueerror: Fehler bei der Überprüfung Modell Ziel: erwartete cropping2d_4 4 Dimensionen zu haben, bekam aber Array mit Form (32, 1)

from sklearn.utils import shuffle 
IMG_PATH_PREFIX = "./data/IMG/" 
def generator(samples, batch_size=64): 
    num_samples = len(samples) 
    while 1: # Loop forever so the generator never terminates 
     shuffle(samples) 
     for offset in range(0, num_samples, batch_size): 
      batch_samples = samples[offset:offset+batch_size] 

      images = [] 
      angles = [] 
      for batch_sample in batch_samples: 
       name = IMG_PATH_PREFIX + batch_sample[0].split('/')[-1] 

       center_image = cv2.imread(name) 
       center_angle = float(batch_sample[3])     

       images.append(center_image) 
       angles.append(center_angle) 

     X_train = np.array(images) 
     y_train = np.array(angles) 

     #X_train = np.expand_dims(X_train, axis=0) 
     #y_train = np.expand_dims(y_train, axis=1) 
     print("X_train shape: ", X_train.shape, " y_train shape:", y_train.shape) 
     #print("X train: ", X_train) 
     yield X_train, y_train 

train_generator = generator(train_samples, batch_size = 32) 
validation_generator = generator(validation_samples, batch_size = 32) 

Hier ist die Ausgangsform ist: X_train Form: (32, 160, 320, 3) y_train Form: (32)

die Modellanpassung Code ist:

model = Sequential() 
#cropping layer 
model.add(Cropping2D(cropping=((50,20), (1,1)), input_shape=(160,320,3), dim_ordering='tf')) 
model.compile(loss = "mse", optimizer="adam") 
model.fit_generator(train_generator, samples_per_epoch= len(train_samples), validation_data=validation_generator, nb_val_samples=len(validation_samples), nb_epoch=3) 

Dann bekomme ich die Fehlermeldung:

Valueerror: Fehler bei der Überprüfung Modell Ziel: erwartete cropping2d_6 4 Dimensionen zu haben, bekam aber Array mit Form (32, 1)

Könnte jemand helfen lassen Sie mich wissen, was das Problem ist ?

Antwort

1

Die große Frage hier ist: Weißt du, was du versuchst zu tun?

1) Wenn Sie here lesen, ist der Eingang ein 4D Tensor und der Ausgang ist auch ein 4D Tensor. Ihr Ziel ist ein 2D-Tensor der Form (batch_size, 1). Wenn also keras versucht, den Fehler zwischen der Ausgabe mit 3D (ohne Batch-Dimension) und dem Ziel mit 1D (ohne Batch-Dimension) zu berechnen, kann dies keinen Sinn ergeben. Ausgaben und Ziele müssen dieselben Dimensionen haben.

2) Wissen Sie, was cropping2D tatsächlich tut? Es beschneidet deine Bilder ... Entferne also Werte am Anfang und am Ende deiner Beschneidungsdimensionen. In diesem Fall geben Sie Bilder mit Form (90, 218, 3) aus. Dies ist keine Vorhersage, es gibt kein Gewicht auf dieser Schicht zu trainieren, also kein Grund, das "Modell" anzupassen. Ihr Modell schneidet nur Bilder. Dafür braucht man kein Training.

Verwandte Themen