【问题标题】:Can't get tensorflow dataset to be accepted by the model.fit function. Some problem with dimensionality无法让 model.fit 函数接受 tensorflow 数据集。维度的一些问题
【发布时间】:2019-12-18 01:34:48
【问题描述】:

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

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。收到的完整形状:[None, 1, 40, 40, 3]

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

那么为什么这不起作用呢? 在将数据集对象提供给模型之前,我是否必须对它做一些事情?

【问题讨论】:

    标签: tensorflow-datasets bmp tensorflow2.0


    【解决方案1】:

    为了将来可能遇到此问题的任何人的利益,我已设法找到问题所在。线索在错误消息中。我很困惑,因为我的模型清楚地表明输入将是 (40, 40, 3),但错误说它需要 4 个暗淡并得到一个输入 (40, 40, 3)。

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2012-11-28
      • 2018-11-25
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多