如何使用tensorflow数据集(TDFS)作为tensorflow模型的输入?



我目前正在使用ImageNet数据集,您可能知道它非常大。

我已经把它从。tar文件预处理成tfrecord文件。

我正在加载它使用:

train, val = tfds.load(*)

我有两个tfds: train和val

然后使用:

调整它们
def resize_with_crop(image, label):
i = image
i = tf.cast(i, tf.float32)
i = tf.image.resize_with_crop_or_pad(i, 224, 224)
i = tf.keras.applications.mobilenet_v2.preprocess_input(i)
return (i, label)
# Preprocess the images
train = train.map(resize_with_crop)
val = val.map(resize_with_crop)

我从这里开始。

在我尝试拟合我的模型d = model.fit(train, validation_data=val,...)后,其中第一层具有形状(None, 224, 224, 3),我收到错误:ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=3

这个问题(我相信)是因为模型一次只给出一个图像(所以它没有4d形状)。我不能将数据集保存在内存中以将其重组为(None, 224, 224, 3),就像我对cifar-10数据集那样。

我的问题是,现在图像的形式(224,224,3),我怎么能使用它们与一个张sorflow模型,期望一个4d形状,但我不能在内存中重塑数据集?

或者有一种方法来调整tfds的形状,使其作为模型的输入?

我不确定我完全理解tfds,这就是为什么我有这个问题。此外,我确信标签会导致问题(因为它们是int型),所以我如何重构tfds标签,使其成为模型的一个热编码?

tfds.load返回一个tf.data.Dataset对象。所以,你可以用tensorflow数据集做任何可能的返回值。

输入的4D数据大多期望为(batch_size, Hight, Width, Channel)。所以,如果你的图像形状是(224,224,3),你需要对它们进行批处理,以便添加批处理尺寸,使其与模型期望的尺寸兼容。

对于批处理数据集,只需使用.batch(batch_size):

train = train.batch(32)
val = val.batch(32)

相关内容

  • 没有找到相关文章

最新更新