用tensorflow datasets创建一个图片路径的数据集

用TFDS官网增加数据集的模板创建一个图像路径的数据集,不懂路径输入的模块是什么原理哎,需要训练集和测试集分开吗?

如果您想创建一个图像数据集,可以使用 tfds.image.ImageFolder 加载文件夹中的图像。这个函数接受一个文件夹路径作为输入,并读取文件夹中的所有图像。它会自动创建类别标签,根据文件夹的结构,文件夹名称就是类别名称。

如果您的数据集中的图像已经分类到不同的文件夹中,那么不需要额外的划分训练集和测试集。但如果图像数据没有划分,那么您可以使用tfds的split的方式拆分数据集,比如train、test、validation。

下面是一个简单的例子,它展示了如何使用 tfds.image.ImageFolder 创建一个图像数据集:

import tensorflow_datasets as tfds

data = tfds.image.ImageFolder("path/to/image_folder")

这样就能使用类似于tfds的方式处理自己的图像数据集了

如果想要将数据分成训练集和测试集可以这样操作:

train_data, validation_data = data.split("train[:60%]", "train[60%:80%]")
test_data = data.split("train[80%:100%]")

其中80%的数据作为训练集,20%的数据作为测试集。

需要注意的是,在使用 tfds.image.ImageFolder 创建数据集时,数据集中的图像文件夹结构应该遵循以下格式:

root/class_name_1/image1.jpg
root/class_name_1/image2.jpg
...
root/class_name_2/image1.jpg
root/class_name_2/image2.jpg
...

其中 root 是文件夹的根目录,后面的文件夹名称对应着类别标签。

通过使用 TFDS 的 tfds.image.ImageFolder 函数,可以轻松地创建一个从文件夹加载图像数据集。并且可以使用TFDS现有的split方式,将数据集分成训练集、测试集和验证集。

就是类似下面这样的过程。

主要参考资料为:

for image, label in zip(all_image_paths[:5], all_image_labels[:5]):
    print(image, ' --->  ', label)
data/flower_photos/sunflowers/9448615838_04078d09bf_n.jpg  --->   3
data/flower_photos/roses/15222804561_0fde5eb4ae_n.jpg  --->   2
data/flower_photos/daisy/18622672908_eab6dc9140_n.jpg  --->   0
data/flower_photos/roses/459042023_6273adc312_n.jpg  --->   2
data/flower_photos/roses/16149016979_23ef42b642_m.jpg  --->   2

创建一个Dataset:

ds = tf.data.Dataset.from_tensor_slices((all_image_paths, all_image_labels))