我在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或其他任何值。标签实际上是完全随机的,我不知道为什么会这样。
我尝试了其他结构,并且可以正常工作。但是这个特殊的人没有,我不知道为什么。有什么明显的我想念的吗?
答案 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,依此类推,而不是一些可疑的连接内容。
无论如何,我将文件夹名称更改为真实类,一切正常。