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)
任何想法如何,我可以解决这个问题?
您的最后一层必须输出与Y相同的形状。 –