首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras模型fit_generator ValueError:检查模型目标时出错:预期cropping2d_4具有4维,但得到形状为(32,1)的数组

keras模型fit_generator ValueError:检查模型目标时出错:预期cropping2d_4具有4维,但得到形状为(32,1)的数组
EN

Stack Overflow用户
提问于 2017-02-22 15:23:27
回答 1查看 1.4K关注 0票数 2

我正在尝试使用keras model.fit_generator()来拟合一个模型,下面是我对生成器的定义:

代码语言:javascript
复制
from sklearn.utils import shuffle
IMG_PATH_PREFIX = "./data/IMG/"
def generator(samples, batch_size=64):
    num_samples = len(samples)
    while 1: # Loop forever so the generator never terminates
        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 = IMG_PATH_PREFIX  + batch_sample[0].split('/')[-1]

                center_image = cv2.imread(name)
                center_angle = float(batch_sample[3])                

                images.append(center_image)
                angles.append(center_angle)

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

        #X_train = np.expand_dims(X_train, axis=0)
        #y_train = np.expand_dims(y_train, axis=1)
        print("X_train shape: ", X_train.shape, " y_train shape:", y_train.shape)
        #print("X train: ", X_train)
        yield X_train, y_train 

train_generator = generator(train_samples, batch_size = 32)
validation_generator = generator(validation_samples, batch_size = 32)

这里的输出形状是: X_train shape:(32,160,320,3) y_train shape:(32,)

模型拟合代码为:

代码语言:javascript
复制
model = Sequential()
#cropping layer
model.add(Cropping2D(cropping=((50,20), (1,1)), input_shape=(160,320,3),  dim_ordering='tf'))
model.compile(loss = "mse", optimizer="adam")
model.fit_generator(train_generator, samples_per_epoch= len(train_samples), validation_data=validation_generator, nb_val_samples=len(validation_samples), nb_epoch=3)

然后我得到了错误消息:

ValueError:检查模型目标时出错:应为cropping2d_6具有4维,但得到形状为(32,1)的数组

有没有人能告诉我出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 21:00:08

这里最大的问题是:你知道你想要做什么吗?

1)如果你阅读here,输入是一个4D张量,输出也是一个4D张量。您的目标是2D形状张量(batch_size,1)。当然,当keras试图计算具有3D (无批处理维度)的输出和具有1D (无批处理维度)的目标之间的误差时,这是没有意义的。输出和目标必须具有相同的维度。

2)你知道cropping2D到底在做什么吗?它正在裁剪你的图像...因此,删除裁剪维度开始和结束时的值。在您的例子中,您输出的是形状(90,218,3)的图像。这不是预测,在这一层上没有要训练的权重,所以没有理由去拟合“模型”。您的模型只是裁剪图像。这不需要训练。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42385106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档