keras — изображение и метка не совпадают в каталоге ImageDataGenerator.flow_from_directory

#python #tensorflow #tf.keras #data-preprocessing

Вопрос:

Я хочу классифицировать около 2000 классов изображений. поэтому я использовал ImageDataGenerator, каталог flow_from_directory.

Я создал основной каталог и 2000 подкаталогов.
в каталоге test1
в главном каталоге(тест1)

в подкаталоге
в подкаталоге

В каждом подкаталоге есть 20 изображений

(всего около 40 тыс. изображений)

И я проверил генератор по этому сценарию.

 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[0][0] имеет 300-е изображения, но a[1][0] имеет 1948-е!!

Но генератор нормально работал менее чем в 10 классах.

Я протестировал 10 классов(изображение цифры 0 ~ 9)

тот же сценарий для генератора 10 классов

Тогда генератор работал нормально!

Почему генератор может генерировать правильную пару менее чем для 10 классов и не может генерировать правильную пару более чем для 10 классов??

Ответ №1:

В каталоге flow_from_directory вы не указали значение параметра shuffle, поэтому по умолчанию оно равно True. Попробуйте установить значение False. Также помните, что в файлах и каталогах python a выбирается в алфавитно-цифровом порядке. Например, ваш список классов выглядит так [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 и т. Д. 0001999 Помните, что файлы также извлекаются в алфавитно-цифровом порядке