【发布时间】:2021-02-21 01:01:43
【问题描述】:
preprocessing 模块内的 Keras image_dataset_from_directory 将路径作为参数,并在这些图像存储在单独的子文件夹中时自动推断类。然而,就我而言,我有一个文件夹,然后在 DataFrame 中指定图像类。
.
├── datasets
│ ├── sample_submit.csv
│ ├── test_images
│ │ ├── test_0000.jpg
│ │ ├── test_0001.jpg
│ │ ├── test_0002.jpg
│ │ └── ...
│ ├── test_images.csv
│ ├── train_images
│ │ ├── train_0000.jpg
│ │ ├── train_0001.jpg
│ │ ├── train_0002.jpg
│ │ └── ...
│ └── train_images.csv
└── model.py
Tensorflow 的 documentation 指定当你不推断标签时,必须指定一个列表或元组,我从 DataFrame df 获得。但是,当我指定图像文件夹时,TensorFlow 会返回 ValueError,因为它没有找到图像:
In [1]: df = pd.read_csv('datasets/train_images.csv')
...: tds = keras.preprocessing\
...: .image_dataset_from_directory('datasets/train_images', list(df['class']),
...: validation_split=0.2, subset='training',
...: seed=123, image_size(180, 180))
ValueError: Expected the lengths of `labels` to match the number of files in the target directory. len(labels) is 1102 while we found 0 files in datasets/train_images.
为什么 keras 无法识别文件夹中的图片?我尝试使用./datasets/train_images 设置“完整”相对路径,使用datasets/train_images/ 添加斜线以及绝对路径,但无济于事。这里缺少什么?或者,在这种情况下是否有更有效的方法,我仍然可以得到训练/测试拆分?
编辑: keras 似乎有一个限制,而这个 question 最初提出了它,但仍然太模糊而无法触及问题的核心。
简单明了:keras 似乎总是为图像抓取 directory 参数的子文件夹并构建数据集。 启用图像加载的解决方法是包装一个额外的文件夹(@ 987654332@) 并将其传递给directory。
但是,我仍然对这种方法有问题,因为现在 keras 似乎无法将自定义类作为列表传递并输出 Found 1102 files belonging to 1 classes.(在这种情况下,现在子文件夹train_images),所以任何帮助仍然很感激。
【问题讨论】:
标签: python keras tensorflow-datasets