在Keras/Tensorflow中将子目录用作类

ykejflvf  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(109)

如果将tf.keras.preprocessing.image_dataset_from_directory('DIR')用于此文件结构

main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg

如何从这个文件结构中创建数据集?

main_directory/
...class_a/
......subclass_1/
.........a_image_1.jpg
......subclass_2/
.........a_image_2.jpg
...class_b/
......subclass_1/
.........b_image_1.jpg
......subclass_2/
.........b_image_2.jpg

我想让tensorflow 在每个图像的类和子类上训练,或者只在每个图像的类和子类名称的连接上训练,这也可以。

nxagd54h

nxagd54h1#

tf.keras.preprocessing.image_dataset_from_directory('DIR')使用给定目录的子文件夹作为模型的类。对于第二个目录结构,它将只有两个类,class_aclass_b
通过这个张流链接来解码图像,它会帮助你。
在函数解析图像中,您可以决定使用什么作为标签

def parse_image(filename):
  parts = tf.strings.split(filename, os.sep)
  label = parts[-2]

  image = tf.io.read_file(filename)
  image = tf.io.decode_jpeg(image)
  image = tf.image.convert_image_dtype(image, tf.float32)
  image = tf.image.resize(image, [128, 128])
  return image, label

这里只使用包含图像的文件夹名,在您的情况下,如果您运行相同的代码,您将只有两个subclass_1subclass_2。因为从class_b目录中,它也将选择相同的类。
但是,如果您想要区分它,您可以在声明标签时遵循更改,
label = parts[-3] + '_' + parts[-2]
现在,它将具有class_a_subclass_1class_a_subclass_2class_b_subclass_1class_b_subclass_2等类,总共四个类。

相关问题