如何探索和修改由 tf.keras.preprocessing.image_dataset_from_directory() 创建的数据集?

以下是我使用该函数的方式:

dataset = tf.keras.preprocessing.image_dataset_from_directory(    main_directory,    labels='inferred',    image_size=(299, 299),    validation_split=0.1,    subset='training',    seed=123)

我想像这个例子一样探索创建的数据集,特别是将其转换为pandas数据框的部分。但我的最低目标是检查标签和附带的文件数量,仅是为了验证确实按预期创建了数据集(子目录即为其中图片的相应标签)。

为清楚起见,main_directory的设置如下:

main_directory- class_a  - 000.jpg  - ...- class_b  - 100.jpg  - ...

我想看到数据集以类似以下方式显示其信息:

label     number of imagesclass_a   100class_b   100

另外,是否有可能从数据集中删除标签和相应的图片?想法是如果相应的图片数量少于某个特定数字或其他指标,则删除它们。当然,这可以通过其他方式在函数外完成,但我很想知道这是否可行,如果可以,如何操作。

编辑:为了提供更多背景信息,所有这些的最终目标是用分类命名的本地图片文件夹训练预训练模型,如这个。如果有更好的方法,包括不使用该函数且达到这一最终目标,同样欢迎。谢谢!


回答:

我认为使用glob2获取所有文件名会更容易,然后按你想要的方式处理它们,再制作一个简单的加载函数来替换image_dataset_from_directory

获取所有文件:

files = glob2.glob('class_*\\*.jpg')

然后按需操作这个文件名列表。

然后,制作一个加载图片的函数:

def load(file_path):    img = tf.io.read_file(file_path)    img = tf.image.decode_jpeg(img, channels=3)    img = tf.image.convert_image_dtype(img, tf.float32)    img = tf.image.resize(img, size=(299, 299))    label = tf.strings.split(file_path, os.sep)[0]    label = tf.cast(tf.equal(label, 'class_a'), tf.int32)    return img, label

然后为训练创建你的数据集:

train_ds = tf.data.Dataset.from_tensor_slices(files).map(load).batch(4)

然后进行训练:

model.fit(train_ds)

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中创建了一个多类分类项目。该项目可以对…

发表回复

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