Keras CNN:验证数据集不包括所有类时的语法

时间:2018-12-22 14:19:14

标签: python tensorflow keras neural-network

我正在使用一个非常不平衡的数据集构建卷积神经网络。数据集是大约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,)

从概念上讲,我理解为什么,但是必须有一种方法可以告诉模型,并非所有类都在验证集中表示。有人知道怎么做吗?

0 个答案:

没有答案