【问题标题】:keras - image and label don't match in ImageDataGenerator.flow_from_directorykeras - ImageDataGenerator.flow_from_directory 中的图像和标签不匹配
【发布时间】:2021-09-06 16:04:51
【问题描述】:

我想对大约 2000 个类别的图像进行分类。所以我使用了 ImageDataGenerator,flow_from_directory。

我做了主目录和2000子目录。
在主目录(test1)

在子目录中

每个子目录有20张图片

(总共大约 40k 张图片)

我通过这个脚本检查了生成器。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

trainDataGen = ImageDataGenerator(rescale=1./255)
trainGenSet = trainDataGen.flow_from_directory(
    './test1',
    batch_size=8,
    target_size=(64,64),
    class_mode='categorical',
    color_mode='grayscale'
)
import numpy as np
import matplotlib.pyplot as plt

a = trainGenSet.next()

plt.imshow(a[0][0])
print(np.argmax(a[1][0]))
plt.show()

然后我看到那张图片与标签不匹配

ex) a[0][0] 有第 300 张图像,但 a[1][0] 有 1948 年!!

但是生成器在不到 10 个类时运行良好。

我测试了 10 个类(数字 0 ~ 9 的图像)

然后生成器工作正常!

为什么生成器可以为少于 10 个类生成正确的对,而不能为超过 10 个类生成正确的对??

【问题讨论】:

    标签: python tensorflow tf.keras data-preprocessing


    【解决方案1】:

    在 flow_from_directory 中,您没有指定参数 shuffle 的值,因此它默认为 True。尝试将其设置为 False。还要记住,在 python 文件和目录中,按字母数字顺序获取。例如,您的课程列表类似于 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20] 生成器将按照 0,1,10,11,12,13,14,15,16,17,18,19,2,20, 3,4,5,6 的顺序获取类目录7,8,9。这就是为什么当您有超过 10 个子目录时,顺序不是您所期望的。您可以通过对子目录名称使用“零”填充来避免这种情况,例如 0000 0001 0002 0003 ETC 0001999 记住文件也是按字母数字顺序获取的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多