Flow_from_dataframe-类数与实际类数不同

时间:2019-02-21 08:44:29

标签: pandas dataframe keras label

我正在使用熊猫来利用.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列],并且print命令显示范围从0到204的“标签”。

但是Flow_from_dataframe会产生“找到了属于181个类别的11372个图像”。而不是205个班级。我想念什么吗?

edit:使用类似代码的验证数据不会出现问题(找到了1954个属于204类的图像)。

1 个答案:

答案 0 :(得分:0)

您的数据集似乎已被keras分割,并且keras在内部确实建立了映射。如果未传递classes参数,则在构建映射时,它将获取数据中存在的所有uinque类并创建映射本身。如果缺少某些类,则稍后在映射中会丢失它们。

所以解决方案是传递您的课程列表,您会没事的:

  

classes:可选的类别列表(例如['dogs','cats'])。默认:   没有。如果未提供,则类别列表将自动显示   从y_col推断,它将映射到标签索引,将是   字母数字)。包含类名称映射的字典   可以通过class_indices属性获得分类索引。

并非如此,因为分类器没有可供学习的示例,因此无法预测训练数据中缺少的课程。