我正在使用熊猫来利用.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类的图像)。
答案 0 :(得分:0)
您的数据集似乎已被keras分割,并且keras在内部确实建立了映射。如果未传递classes
参数,则在构建映射时,它将获取数据中存在的所有uinque类并创建映射本身。如果缺少某些类,则稍后在映射中会丢失它们。
所以解决方案是传递您的课程列表,您会没事的:
classes:可选的类别列表(例如['dogs','cats'])。默认: 没有。如果未提供,则类别列表将自动显示 从y_col推断,它将映射到标签索引,将是 字母数字)。包含类名称映射的字典 可以通过class_indices属性获得分类索引。
并非如此,因为分类器没有可供学习的示例,因此无法预测训练数据中缺少的课程。