为什么gen.flow_from_directory()只接受一个有两个文件夹的文件夹,每个文件夹都有一个类



集群任务:

我有一个名为"的文件夹;列车";其中包含我自己的火车图像数据集(1000(,所有图像都未标记(类1和类2没有两个文件夹(我想用tf.data.Dataset.from_generator导入我的数据集,如下

train_gen = tf.keras.preporocessing.image.ImageDataGenerator()
train_set = train_gen.flow_from_directory('/path/train')

运行代码时发现以下消息:Found 0 images belonging to 0 classes

train目录中创建一个目录
添加该目录中的所有图像。

并将上述代码与class_mode = None一起使用
代码:

train_gen = tf.keras.preprocessing.image.ImageDataGenerator()
train_set = train_gen.flow_from_directory('path/train',class_mode = None)

使用class_mode = None,生成器将仅返回增强图像。

有关完整选项,请参见此处。

ImageDataGenerator希望您指定的目录将包含子目录。每个子目录都应包含与特定类相关联的图像。例如,如果你试图对狗和猫的图像进行分类,你会有一个子目录,你可以命名包含狗图像的狗,还有一个子目录命名包含猫图像的猫。在您的情况下,在目录"/path/train"中创建一个子目录(名称是任意的(,并将图像放置在该子目录中。生成器将批量导入这些图像。当生成器运行时,应该会收到消息Found 1000 images into 1 classes。在flow_from_directory中设置参数class_mode=None。这将导致生成器只生成图像而不生成标签。

您可以使用这个简单的函数:

def load(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_png(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, size=(100, 100)) # optional
return img 
ds = tf.data.Dataset.from_tensor_slices(x).map(load)
next(iter(ds))
<tf.Tensor: shape=(100, 100, 3), dtype=float32, numpy=
array([[[0.40976474, 0.47250983, 0.56270593],
[0.4039216 , 0.4666667 , 0.5568628 ],
[0.41176474, 0.48235297, 0.57254905],
...,
[0.5620584 , 0.5812747 , 0.6775489 ],
[0.53252923, 0.5579019 , 0.6559411 ],
[0.5176471 , 0.5568628 , 0.6509804 ]]], dtype=float32)>

最新更新