2017-07-25 5 views
1

Ich habe gerade diese Woche mit Keras begonnen und habe die Dokumentation durchgegangen, um herauszufinden, warum ich einen Fehler erhalte. Aber ich dachte, es wäre schneller, wenn ich Hilfe bekomme, und es fühlt sich an wie ein Detail, das ich gerade nicht sehe.Keras Fehler bei der Verwendung von Lambda

Error when checking model input: expected lambda_input_1 to have 4 dimensions, 
but got array with shape (0, 1) 

Hier ist der gesamte Code zu prüfen, ob das hilft Ihnen zu sehen, was ich falsch mache.

import csv 
import cv2 
import numpy as np 

lines = [] 
with open('../data2/driving_log.csv') as csvfile: 
     reader = csv.reader(csvfile) 
     for line in reader: 
       lines.append(line) 
     for row in reader: 
      steering_center = float(row[3]) 
       # create adjusted steering measurements for the side camera images 
      correction = 0.2 # this is a parameter to tune 
      steering_left = steering_center + correction 
      steering_right = steering_center - correction 
       # read in images from center, left and right cameras 
      directory = "..." # fill in the path to your training IMG directory 
      img_center = process_image(np.asarray(Image.open(path + row[0]))) 
      img_left = process_image(np.asarray(Image.open(path + row[1]))) 
      img_right = process_image(np.asarray(Image.open(path + row[2]))) 
       # add images and angles to data set 
      car_images.extend(img_center, img_left, img_right) 
      steering_angles.extend(steering_center, steering_left, steering_right) 

images = [] 
measurements =[] 
for line in lines: 
     source_path = line[0] 
     filename = source_path.split('/')[-1] 
     current_path = '../data2/IMG/' + filename 
     image = cv2.imread(current_path) 
     measurement = float(line[3]) 
     measurements.append(measurement) 

augmented_images, augmented_measuremnets = [], [] 
for image, measurement in zip(image, measurements): 
     augmented_images.append(image) 
     augmented_measuremnets.append(measurement) 
     augmented_images.append(cv2.flip(image,1)) 
     augmented_measuremnets.append(measurement*-1) 

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

from keras.models import Sequential 
from keras.layers import Flatten, Dense, Lambda, Cropping2D 
from keras.layers.convolutional import Convolution2D 
from keras.layers.pooling import MaxPooling2D 

model = Sequential() 
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape=(160,320,3))) 
model.add(Cropping2D(cropping=((70,25), (0,0)))) 
model.add(Convolution2D(24,5,5, subsample=(2,2), activation="relu")) 
model.add(Convolution2D(36,5,5, subsample=(2,2), activation="relu")) 
model.add(Convolution2D(48,5,5, subsample=(2,2), activation="relu")) 
model.add(Convolution2D(64,3,3, activation="relu")) 
model.add(Convolution2D(64,3,3, activation="relu")) 
model.add(Flatten()) 
model.add(Dense(120)) 
model.add(Dense(84)) 
model.add(Dense(1)) 

model.compile(loss='mse', optimizer='adam') 
model.fit(X_train, y_train, validation_split=0.2, shuffle=True, nb_epoch=5) 


model.save('model.h5') 
exit() 

Ich versuche, wenn ich meine Eingangsdaten gesetzt, um die Größe benötigen, um herauszufinden, für diese model.fit(...) Funktion nicht richtig zu arbeiten. Es funktionierte vorher ohne Probleme, bis ich den Ausschnitt und mehr Daten hinzufügte.

Danke, jede Richtung würde helfen, auch wenn es mich nur näher bringt, diesen dimensionalen Fehler zu verstehen.

File "nvidia.py", line 64, in <module> 
     model.fit(X_train, y_train, validation_split=0.2, shuffle=True, nb_epoch=5) 
     File "/home/carnd/anaconda3/envs/carnd-term1/lib/python3.5/site-packages/keras/models.py", line 672, in fit 
     initial_epoch=initial_epoch) 
     File "/home/carnd/anaconda3/envs/carnd-term1/lib/python3.5/site-packages/keras/engine/training.py", line 1117, in fit 
     batch_size=batch_size) 
     File "/home/carnd/anaconda3/envs/carnd-term1/lib/python3.5/site-packages/keras/engine/training.py", line 1030, in _standardize_user_data 
     exception_prefix='model input') 
     File "/home/carnd/anaconda3/envs/carnd-term1/lib/python3.5/site-packages/keras/engine/training.py", line 112, in standardize_input_data 
     str(array.shape)) 
    ValueError: Error when checking model input: expected lambda_input_1 to have 4 dimensions, but got array with shape (0, 1) 

Antwort

1

Sie haben vergessen image in images einzufügen. So X_train ist im Grunde leer.

+0

Sie haben Recht! Ich weiß nicht, wie das durcheinander gekommen ist ... Ich habe es auf einem früheren Modell gemacht. Vielen Dank! –

0

Die Lösung war nicht das Lambda oder in Keras war ich dumm, irgendwie hat dieses Modell die Zeile images.append(image) nicht bekommen, so dass das X_train Array nicht gefüllt wurde. Problem gelöst.

Verwandte Themen