Flow_from_dataframe - количество классов отличается от фактического количества классов - PullRequest
0 голосов
/ 21 февраля 2019

Я использую pandas для использования файла .txt и flow_from_dataframe, чтобы помочь мне читать изображения из папок.

Это мой код:

import keras
import pandas as pd 
from keras_preprocessing import image
from keras.preprocessing.image import ImageDataGenerator

datagen = image.ImageDataGenerator(rescale=1./255)

data = pd.read_csv('/directory/clipart_train.txt', sep=" ", header=None)
data.columns = ["id", "labels"]

print(data)
print(data["id"].shape)
print(data["labels"].shape)

data["labels"] = data["labels"].astype('str')
print(data["labels"].dtype)

train_generator=datagen.flow_from_dataframe(
        dataframe = data,
        directory = "/directory/",
        x_col = "id",
        y_col = "labels",
        target_size=(224,224),
        class_mode = 'categorical',
        batch_size = 1
        )

Я получаю следующий формат: [11372 строк x 2 столбца], и команда печати показывает «метки» в диапазоне от 0 до 204.

Но Flow_from_dataframe выдает «Найдено 11372 изображений, принадлежащих 181 классу».вместо 205 классов.Я что-то упустил?

edit: Проблема не возникает с данными проверки с похожим кодом (найдено 1954 изображений, принадлежащих к 204 классам).

1 Ответ

0 голосов
/ 21 февраля 2019

Кажется, ваш набор данных разделен на керасы, а керасы внутренне создают отображение.Если вы не передаете параметр classes, в то время как отображение построено, оно берет все классы uinque, присутствующие в данных, и создает само отображение.Если некоторые классы отсутствуют, они позже отсутствуют в отображении.

Таким образом, решение состоит в том, чтобы передать список ваших классов, и у вас все будет хорошо:

классы: необязательносписок классов (например, ['собаки', 'кошки']).По умолчанию: нет.Если не указан, список классов будет автоматически выведен из y_col, который будет сопоставлен с индексами меток (будет буквенно-цифровым).Словарь, содержащий сопоставление имен классов и индексов классов, можно получить с помощью атрибута class_indices.

Не то, чтобы отсутствующие классы в данных обучения не могли быть предсказаны, поскольку у вашего классификатора нет примеров для изучения.с.

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