如何将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)# 预处理图像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),如何将它们用于期望4D形状的TensorFlow模型,而我无法在内存中重塑数据集?

或者,有没有办法调整tfds的形状,使其作为模型的输入?

我不确定我是否完全理解tfds,这就是我遇到这个问题的根本原因。此外,我确信标签也会引起问题(因为它们是整数),那么如何重新构造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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注