Набор проверки получает изображения только из одного класса при использовании keras ImageDataGenerator flow_from_dataframe - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть список изображений вместе с классом, к которому он принадлежит в этом формате:

list.txt

image1 good
image2 good
image3 good
.
.
.
image4 bad
image5 bad
image6 bad

Я использовал ImageDataGenerator для разделения данных проверки:

train_datagen = ImageDataGenerator(rescale=1./255, validation_split = 0.25)

Я использовал pandas для чтения из файла makeframe файла:

load_images = pd.read_csv("list.txt", delim_whitespace = True, header = None)
load_images.columns = ['filename','class']
load_images.columns = load_images.columns.str.strip()

trainDataframe = load_images    

Я использовал flow_from_dataframe для создания генераторов поездов и проверки:

train_generator = train_datagen.flow_from_dataframe(
        trainDataFrame,
        x_col = 'filename',
        y_col = 'class',
        directory = path_to_parent_folder_of_images,
        target_size=(inputHeight, inputWidth),
        batch_size=batch_size,
        class_mode='categorical',
        subset = 'training',
        save_to_dir = "path_to_folder\\training",
        shuffle = True)

validation_generator = train_datagen.flow_from_dataframe(
        trainDataFrame,
        x_col = 'filename',
        y_col = 'class',
        directory = path_to_parent_folder_of_images,
        target_size=(inputHeight, inputWidth),
        batch_size=batch_size,
        class_mode='categorical',
        subset= 'validation',
        save_to_dir = "path_to_folder\\validation",
        shuffle = True)

Наконец я тренирую модель:

model.fit_generator(
    train_generator,
    steps_per_epoch = train_generator.n // train_generator.batch_size,
    epochs = epochs,
    validation_data = validation_generator,
    validation_steps = validation_generator.n // validation_generator.batch_size,
    callbacks = callback_list)        

Проблема состоит в том, что набор проверки содержит только изображения из класса bad . Нет изображений другого класса. Я использовал сохранить изображения в директории параметр, и я вижу только изображения из одного класса. Тренировочный генератор выглядит хорошо (имеет изображения как хороших, так и плохих). Моя точность проверки всегда равна 0 или 1 из-за этой ошибки. Я видел примеры в Интернете и пытался им следовать. Никто, похоже, не сталкивался с этой проблемой, поэтому я не уверен, что делаю неправильно.

Я использую следующие версии: python - 3.7.4

tenorflow - 2.0.0

керас - 2.3.1

1 Ответ

0 голосов
/ 06 марта 2020

Я понял, что flow_from_dataframe () берет первые 25% изображений из списка вместо случайного выбора. Поскольку мой список отсортирован, то есть все хорошие классы вместе и плохие вместе, он брал первые 25% изображений и отправлял их в набор проверки, а поскольку список отсортирован, он всегда помещал хорошие изображения в val_set. Я использовал

from sklearn.utils import shuffle dataframes = shuffle(dataframes)

, чтобы перемешать и отправить его в flow_from_dataframe (), и это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...