【问题标题】:Flow_from_dataframe - number of classes differs from actual number of classesFlow_from_dataframe - 类数与实际类数不同
【发布时间】:2019-07-15 02:35:37
【问题描述】:

我正在使用 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 产生“找到属于 181 个类别的 11372 张图像。”而不是 205 个班级。我错过了什么吗?

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

【问题讨论】:

    标签: pandas dataframe keras label


    【解决方案1】:

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

    所以解决方案是传递你的类列表,你会没事的:

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

    并不是说训练数据中缺少的类是无法预测的,因为您的分类器没有可学习的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多