如何使用张量流数据集 (TDFS) 作为张量流模型的输入?
How can I use a tensorflow data set (TDFS) as an input for a tensorflow model?
我目前正在使用 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)
我正在关注 here。
在尝试拟合我的模型后,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),我如何将它们与期望 4d 形状但我无法在内存中重塑数据集的张量流模型一起使用?
或者有没有办法调整 tfds 形状,使其作为模型的输入?
我不确定我是否完全理解 tfds,这就是我遇到这个问题的原因。此外,我确信标签会导致问题(因为它们是整数),那么我如何将 tfds 标签重组为模型的热编码?
tfds.load
returns 一个 tf.data.Dataset
对象。因此,您可以使用 tensorflow 数据集尽可能地处理返回值。
输入的 4D 数据大多预期为 (batch_size, Hight, Width, Channel)
。因此,如果您的图像的形状为 (224,224,3),您需要对它们进行批处理以添加批次维度以与模型期望的兼容。
要对数据集进行批处理,只需使用 .batch(batch_size)
:
train = train.batch(32)
val = val.batch(32)
我目前正在使用 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)
我正在关注 here。
在尝试拟合我的模型后,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),我如何将它们与期望 4d 形状但我无法在内存中重塑数据集的张量流模型一起使用?
或者有没有办法调整 tfds 形状,使其作为模型的输入?
我不确定我是否完全理解 tfds,这就是我遇到这个问题的原因。此外,我确信标签会导致问题(因为它们是整数),那么我如何将 tfds 标签重组为模型的热编码?
tfds.load
returns 一个 tf.data.Dataset
对象。因此,您可以使用 tensorflow 数据集尽可能地处理返回值。
输入的 4D 数据大多预期为 (batch_size, Hight, Width, Channel)
。因此,如果您的图像的形状为 (224,224,3),您需要对它们进行批处理以添加批次维度以与模型期望的兼容。
要对数据集进行批处理,只需使用 .batch(batch_size)
:
train = train.batch(32)
val = val.batch(32)