我正在使用一个非常不平衡的数据集构建卷积神经网络。数据集是大约15k图像,带有大约5k唯一标签。
某些图像出现多次,但是某些图像仅出现一次。由于某些图像仅出现一次,因此它们不能同时出现在训练和验证数据集中。
我选择将所有仅在火车集中出现一次的标签包括在内。因此,测试集在所有5k标签中至少有1张图像。但是,测试集仅包含来自约2.5K标签的图像。
我正在使用keras flow_from_dataframe将一批图像提供给模型。数据框包含两列,一列用于图像名称,一列用于图像ID。图像iD是数值(即1-5k)。训练和验证数据集都包括最大标签。
训练过程失败,因为并非所有类别都在验证集中表示。
要设置训练生成器,我使用以下语法。
train_generator = data_generator.flow_from_dataframe(
dataframe=train_xnw_t,
directory=train_dir,
x_col="Image",
y_col="num_id",
has_ext=True,
target_size=(image_size, image_size),
batch_size=batch_size,
class_mode='categorical',
seed = 0)
我正在使用以下语法设置验证数据生成器。
validation_generator = data_generator.flow_from_dataframe(
dataframe=train_xnw_v,
directory=train_dir,
x_col="Image",
y_col="num_id",
has_ext=True,
target_size=(image_size, image_size),
batch_size=batch_size,
class_mode='categorical')
我正在按以下方式拟合模型。
epochs = 10
history=model.fit_generator(generator=train_generator,
steps_per_epoch= train_generator.n//batch_size,
validation_data = validation_generator,
validation_steps = validation_generator.n//batch_size,
epochs=epochs)
我收到此错误。
Error when checking target: expected dense to have shape (5004,) but got array with shape (2931,)
从概念上讲,我理解为什么,但是必须有一种方法可以告诉模型,并非所有类都在验证集中表示。有人知道怎么做吗?