2017-03-14 3 views
1

Hey Leute kann mir jemand helfen mit meinem Code bitte, kann nicht herausfinden, was zu ändern.Bitte helfen Sie es sehr schwierig für mich, da ich neu zu verwenden Deep-Learning bin. Ich weiß, dass die Form das Problem ist, aber ich weiß nicht, was es zu ändern, oder, wie man in KerasWert Fehler in Keras

import csv 
import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

lines=[] 
with open('/home/charan/Desktop/Car/Term1/CarND-Behavioral-Cloning-P3/data/data/driving_log.csv') as csvfile: 
    reader = csv.reader(csvfile) 
    #read = pd.read_csv(csvfile) 
    for line in reader: 
     lines.append(line) 
images = [] 
measurements = [] 
for line in lines: 
    source_path = line[0] 
    #print(source_path) 
    filename = source_path.split('/')[-1] 
    current_path = "/home/charan/Desktop/Car/Term1/CarND-Behavioral-Cloning-P3/output/IMG/" + filename 
    image = cv2.imread(current_path) 
    img = images.append(image) 
    measurement = float(line[3]) 
    measurements.append(measurement) 
X_train = np.array(images) 
y_train = np.array(measurements) 

from keras.models import Sequential 
from keras.layers import Flatten, Dense 

model = Sequential() 
model.add(Flatten(input_shape=(160,320,3))) 
model.add(Dense(1)) 
model.compile(loss='mse', optimizer='adam') 

model.fit(X_train, y_train, validation_split=0.2, shuffle=True, nb_epoch=7) 
model.save('model.h5') 

Ich erhalte einen Wert Fehler als solche:

ValueError: Error when checking model input: expected lambda_input_2 to have 3 dimensions, but got array with shape (8037, 1) 

In der Zeile

---> 50 model.fit(X_train, y_train, validation_split=0.2, shuffle=True) 
+0

Könnten Sie die erste Zeile von 'X_train' ausdrucken? –

+0

Sie verpassen einen Z_train oder eine dritte Achse. Es sagt Ihnen, dass die Funktion die 3 Parameter erwartet, aber Sie haben 2 bestanden. – mutantkeyboard

+0

@ MarcinMożejko Wenn ich den X_train drucke bekomme ich es als None –

Antwort

0

Das Problem könnte mit Ihrer Bildgröße sein. Wenn nicht alle Bilder die gleiche Größe haben, stimmt die Form von X_train nicht mit der Eingabe Ihres Modells überein.

versuchen, alle Ihre Bilder auf die gleiche Größe wie das Ändern der Größe:

Änderung dieser:

image = cv2.imread(current_path) 

in:

image = cv2.resize(cv2.imread(current_path),(256,256)) 

und diese:

model.add(Flatten(input_shape=(160,320,3))) 

in:

model.add(Flatten(input_shape=(256,256,3))) 
+0

Das Bild ist das gleiche wie das der abgeflachten, aber es zeigt Wert Fehler wegen y_train Dies ist der Fehler, den ich bekomme "ValueError: Fehler beim Überprüfen der Modelleingabe: erwartet flatten_input_4 4 Dimensionen zu haben, aber Array bekommen mit Form (8037, 1) '. Ich habe die X_train [1] .shape verwendet, um die Form zu bestätigen –

+0

Ich habe es geschafft, Ihr Problem auf zwei Arten zu reproduzieren: Die erste ist, wenn ich Fehler in einem der Bilder Namen in der gelesenen hinzufügen. Die zweite Möglichkeit besteht darin, Bilder mit verschiedenen Größen zu haben (Sie benötigen ein Bild mit unterschiedlicher Größe, um das Problem zu verursachen, und deshalb sagt das Überprüfen des X_train [1] .shape nicht wirklich, ob es ein Problem gibt oder nicht). – David

+0

Die Bilder geben die korrekte Form zurück, wenn ich jedes Element des X_train aufruft, aber wenn ich die Form von X_train einfach ausdrücke, zeigt es es als ein Array von (8037,1) an. Gibt es ein Problem mit numpy array ??? –