我想分类大约2000类图像。所以我用了ImageDataGenerator,flow_from_directory。
我制作了主目录和2000子目录。

在主目录(Test1)中

在子目录中
每个子目录有20个图像
(合共约四万张图片)
我用这个脚本检查了生成器。
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()然后我看了那个不符合标签的图片
A有第300张图片,但a1有1948年!
但发电机运转良好,不到10节课。
我测试了10个类(数字0~9的图像)。

然后发电机就正常工作了!
为什么生成器可以生成少于10个类的正确对,而不能生成超过10个类的正确对呢??
发布于 2021-09-06 17:54:34
在flow_from_directory中,您没有指定参数洗牌的值,因此它默认为True。试着把它设为假。还请记住,在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、18、2、20、3、4、5、6、7、8、9的顺序获取。这就是为什么当您有超过10个子目录时,顺序不是您所期望的。您可以通过对您的子目录名(如0000 0001 0002 0003等)使用“零”填充来避免这种情况。记住,文件也是按字母数字顺序提取的。
https://stackoverflow.com/questions/69077507
复制相似问题