无法让 model.fit 函数接受 tensorflow 数据集。维度的一些问题



我正在尝试使用以下代码行解码位图

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时,出现以下错误

值错误:检查输入时出错:预期input_1有 4 尺寸,但得到形状为 (40、40、3( 的数组

我尝试将输入形状更改为诸如i = Input(shape=(1,40,40,3))

但是后来我在模型中遇到了一个不同的错误:

值错误:图层 conv2d_3 的输入 0 与图层不兼容: 预期 NDIM=4,发现 NDIM=5。收到的完整形状:[无,1,40,40, 注3]

因此,看起来 tf.dataset 实际上是 4dims,并且我的输入应该按照 (40, 40, 3( 指定 3 dims 是正确的

那么为什么这不起作用呢? 在将数据集对象馈送到模型之前,是否必须对数据集对象执行某些操作?

为了将来可能遇到这种情况的任何人的利益,我设法找到了问题所在。线索在错误消息中。我很困惑,因为我的模型清楚地表明输入将是 (40, 40, 3(,但错误说它期望 4 dims 并得到输入 (40, 40, 3(。

但这就是答案。模型"拟合"功能需要 4D 输入。我试图输入整个数据集对象(这是一个 3D 对象(,它期待 4D。

它期待 4D,因为另一个维度是批量大小,这就是为什么当您批量处理数据集并将其输入时,它会突然起作用。对数据进行批处理,添加额外的维度。

相关内容

  • 没有找到相关文章

最新更新