Keras flow_from_directory弄乱了标签

时间:2018-12-16 15:37:17

标签: keras

我在keras生成器中加载成批图像。该目录具有以下结构:

alot/
  1/
    1_c1i.png
    1_c1l1.png
    1_c1L1r60.png
    ...
  2/
    2_c1i.png
    2_c1l1.png
    ...
...

每个目录对应一个类,并包含100张图像。当我将它们加载到生成器中时,似乎完全弄乱了图像所属的标签。

image_size_x = 200
image_size_y = 200

train_generator = datagen.flow_from_directory(
        'D:/wrkfldr/dataset_textures/alot',  
        batch_size=32,
        target_size=(image_size_x,image_size_y),
        class_mode='categorical')

如果我遍历图像,则各图所示的标签是错误的

x,y = train_generator.next()
for i in range(0,31):
    image = x[i]
    label = y[i]
    index = list(label).index(1)
    print (index)
    plt.imshow(image.reshape(image_size_x,image_size_y,3).astype(np.uint8))
    plt.show()

我检查过,偏移量是否为1或-1或其他任何值。标签实际上是完全随机的,我不知道为什么会这样。

我尝试了其他结构,并且可以正常工作。但是这个特殊的人没有,我不知道为什么。有什么明显的我想念的吗?

1 个答案:

答案 0 :(得分:0)

太棒了。

从一开始,出于某种原因,我无法理解,python并不是通过递增数字来对文件夹进行分类,而是使用串联数字或无用数字进行混合。

如果我运行

import os

    path = 'D:/wrkfldr/dataset_textures/alot'
    i = 0
    for _dir in os.listdir(path):

        print('%s %d' % (_dir,i))
        i += 1

结果是

1
10
100
101
102
103
104
105
106
107
108
109
11
110
111
112
113
114
115

很明显,我的标签完全没用,因为我制作了用于标签的CSV,例如第一行代表0,第二行代表1,第三行代表2,依此类推,而不是一些可疑的连接内容。

无论如何,我将文件夹名称更改为真实类,一切正常。