Генератор данных изображения keras .flow_from_directory (каталог) унифицировать / объединить классы - PullRequest
0 голосов
/ 18 сентября 2018

Я использую Python с Keras и ImageDataGenerator для генерации изображений из каталога.У меня есть около 20 классов, и я бы хотел как-то их объединить.Например, классы 1-4 - это x, а 5-8 - это y.Может ли ImageDataGenerator сделать это в flow_from_directory или мне нужно разделить каталоги по-разному в соответствии с моей потребностью объединения классов (например, объединение каталогов 1-4 в dir x)?

1 Ответ

0 голосов
/ 18 сентября 2018

Я не думаю, что есть встроенный способ сделать это. Однако один из альтернативных способов заключается в том, чтобы поместить генератор в другой генератор и изменить в нем метки (для демонстрации здесь я предположил, что изначально у нас есть четыре класса, и мы хотим, чтобы классы один и два считались новыми первый класс и третий и четвертый классы рассматриваются как новый второй класс):

# define the generator
datagen = ImageDataGenerator(...)

# assign class_mode to 'sparse' to make our work easier
gen = datagen.flow_from_directory(..., class_mode= 'sparse')

# define a mapping from old classes to new classes (i.e. 0,1 -> 0 and 2,3 -> 1)
old_to_new = np.array([0, 0, 1, 1])

# the wrapping generator
def new_gen(gen):
    for data, labels in gen:
        labels = old_to_new[labels]
        # now you can call np_utils.to_categorical method 
        # if you would like one-hot encoded labels
        yield data, labels

# ... define your model

# fit the model
model.fit(new_gen(gen), ...)
...