Keras model.fit_生成器:检查目标时出错:预期lambda_2有4个维度,但得到了形状为(200,1)的数组

Keras model.fit_生成器:检查目标时出错:预期lambda_2有4个维度,但得到了形状为(200,1)的数组,keras,Keras,我实现了一个生成器来为培训过程提供信息,但是fit\u生成器抛出以下错误: 检查目标时出错:预期lambda_2有4个维度, 但是得到了形状为(200,1)的数组 函数似乎在某个点切换X和y,因为(200,1)是“y”形,而不是“X”形 如果我使用以下代码测试发电机,它工作正常: for i in range(32): train = next(train_generator) print(train[0].shape) 但是使用fit_生成器会抛出一个错误 这是我的代

我实现了一个生成器来为培训过程提供信息,但是
fit\u生成器
抛出以下错误:

检查目标时出错:预期lambda_2有4个维度, 但是得到了形状为(200,1)的数组

函数似乎在某个点切换X和y,因为(200,1)是“y”形,而不是“X”形

如果我使用以下代码测试发电机,它工作正常:

for i in range(32):    
    train = next(train_generator)
    print(train[0].shape)
但是使用
fit_生成器
会抛出一个错误

这是我的代码:

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)

有什么办法解决这个问题吗?

加载图像时出错,名称定义不正确。由于
cv2.imread(name)
没有引发错误,因为它没有找到图像,只是返回了一个None对象,该方法返回了一个空变量,这导致了网络上的错误。

这是加载图像时的错误,名称定义不正确。由于
cv2.imread(name)
没有引发错误,因为它没有找到图像,只是返回了一个无对象,该方法返回了一个空变量,这导致了网络上的错误。

最后一层必须输出与Y相同的形状。最后一层必须输出与Y相同的形状。