2017-06-29 94 views
0

我實現了一個發生器喂訓練的過程,但fit_generator引發此錯誤:model.fit_generator:錯誤檢查時的目標:預期lambda_2有4個維度,但得到了陣列形狀(200,1)

Error when checking target: expected lambda_2 to have 4 dimensions, but got array with shape (200, 1)

看起來函數是在某個點上切換X和Y,因爲(200,1)是「y」形,而不是「X」形。

如果我測試的代碼發生器低於它正常工作:

for i in range(32):  
    train = next(train_generator) 
    print(train[0].shape) 

但隨着fit_generator引發錯誤。

這是我的代碼:

import os 
import csv 

samples = [] 
with open('data/driving_log.csv') as csvfile: 
    reader = csv.reader(csvfile) 
    for line in reader: 
     samples.append(line) 

from sklearn.model_selection import train_test_split 
train_samples, validation_samples = train_test_split(samples, test_size=0.2) 

import cv2 
import numpy as np 
import sklearn 

def generator(samples, batch_size=32): 
    num_samples = len(samples) 
    while 1: # Loop forever so the generator never terminates 
     sklearn.utils.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 = 'data\\'+batch_sample[0].split('\\')[-1] 
       center_image = cv2.imread(name) 
       center_angle = float(batch_sample[3]) 

       if not center_image is None: 
        images.append(center_image) 
        angles.append(center_angle) 



      # trim image to only see section with road 
      X_train = np.array(images) 
      y_train = np.array(angles) 

      yield sklearn.utils.shuffle(X_train, y_train) 

# compile and train the model using the generator function 
train_generator = generator(train_samples, batch_size=int(len(train_samples)/32)) 
validation_generator = generator(validation_samples, batch_size=int(len(validation_samples)/32)) 

ch, row, col = 3, 160, 320 # Trimmed image format 

from keras.models import Sequential 
from keras.layers import Lambda 


model = Sequential() 
# Preprocess incoming data, centered around zero with small standard deviation 
model.add(Lambda(lambda x: x/127.5 - 1., 
     input_shape=(row, col, ch), 
     output_shape=(row, col, ch))) 
#model.add(... finish defining the rest of your model architecture here ...) 

model.compile(loss='mse', optimizer='adam') 

model.fit_generator(train_generator, 
        steps_per_epoch=len(train_samples)/32, validation_data=validation_generator, 
        validation_steps=len(validation_samples)/32, epochs=3) 

任何想法如何,我可以解決這個問題?

+0

您的最後一層必須輸出與Y相同的形狀。 –

回答

0

這是加載圖像上的錯誤,名稱未正確定義。由於cv2.imread(name)不會產生錯誤,因爲它沒有找到圖像,只是返回一個None對象,該方法返回一個空變量,導致網絡上的錯誤。

相關問題