无法获得tensorflow数据集被model.fit函数接受。尺寸问题

问题描述 投票:0回答:1

我正在尝试使用下面的代码行对位图进行解码

img = tf.image.decode_bmp(img, channels=3)

使用.map功能从中创建图像/标签对的tf.dataset

test_labeled_ds = test_list_ds.map(process_path)

并将其输入model.fit

model.fit(test_labeled_ds, epochs=10, validation_data=val_labeled_ds)

使用下面的模型架构

i = Input(shape=(40,40,3))
x = Conv2D(32, (3,3), strides=2, activation='relu') (i)
x = Conv2D(64, (3,3), strides=2, activation='relu') (x)
x = Conv2D(128, (3,3), strides=2, activation='relu') (x)
x = Flatten()(x)
x = Dense(512, activation = 'relu')(x)
x = Dropout(0.2)(x)
x = Dense(5, activation ='softmax')(x)

model = Model(i, x)

但是当我运行model.fit时出现以下错误

ValueError:检查输入时出错:预期input_1具有4尺寸,但具有形状为(40,40,3)的数组]

我已经尝试将输入形状更改为i = Input(shape=(1,40,40,3))之类的东西>

但是随后我在模型中得到了另一个错误:

ValueError:conv2d_3层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 5。收到完整的图形:[无,1、40、40,3]

所以看来tf.dataset实际上是4dims,正确的是,我的输入应按照(40,40,3)的3个dims指定]

那为什么不起作用?在将其输入模型之前,是否必须对数据集对象做一些事情?

我正在尝试使用img = tf.image.decode_bmp(img,channels = 3)下面的代码行对位图进行解码,使用.map函数test_labeled_ds =来创建图像/标签对的tf.dataset。 ..

tensorflow-datasets bmp tensorflow2.0
1个回答
0
投票

为了将来可能遇到此问题的所有人的利益,我设法找到了问题。提示在错误消息中。我很困惑,因为我的模型清楚地指出输入为(40,40,3),但是错误却表明它预期会出现4个暗淡并得到输入(40,40,3)。

但这就是答案。模型的“拟合”功能需要4D输入。我试图输入整个数据集对象(这是一个3D对象),并且它期望使用4D。

© www.soinside.com 2019 - 2024. All rights reserved.