1

我正在训练一个简单的 CNN,其中 Nt=148 + Nv=37 图像分别用于训练和验证。我使用该ImageGenerator.flow_from_directory()方法是因为我计划将来使用数据增强,但目前我不想要任何数据增强。我只想从磁盘中一张一张地读取图像(并且每张都只读取一次,这对于验证非常重要)以避免将所有图像都加载到内存中。

但以下内容让我认为正在发生与预期不同的事情:

  1. 训练和验证准确度达到的值不类似于以 148 或 37 作为分母的分数。实际上试图从 delta 的约数中估计一个合理的分母,导致数字远大于 148(大约 534 或 551,见下文(*)为什么我认为它们应该是 19 的倍数)和 37
  2. 验证训练和验证数据集上的所有预测(使用单独的程序,它只读取验证目录一次并且不使用上述生成器),显示了一些不完全是 (1-val_acc)*Nv 的失败正如我所料

(*) 最后我发现我用于两者的批量大小都是 19,所以我希望我提供每个 epoch 19*7=133 或 19*8=152 个训练图像和 19 或 38 个图像作为验证集纪元结束。

顺便说一句:是否可以使用model.fit_generator()从 构建的生成器ImageGenerator.flow_from_directory()来实现: - 没有数据增强 - 两个生成器应分别将所有图像分别提供给训练过程和验证过程,每个 epoch 只提供一次 - 洗牌很好,实际上需要,以便每个时期运行不同

同时,我将自己定位为将批量大小设置为等于验证集长度(即 37)。作为训练集数量的一个分隔符,我认为它应该计算出这些数字。

但是我仍然不确定以下代码是否达到了“根本没有数据增强”的要求

valid_augmenter = ImageDataGenerator(rescale=1./255)

val_batch_size = 37

train_generator = train_augmenter.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=val_batch_size,
    class_mode='binary',
    color_mode='grayscale',
    follow_links=True )

validation_generator = valid_augmenter.flow_from_directory(
    validation_data_dir,
    target_size=(img_height,img_width),
    batch_size=val_batch_size,
    class_mode='binary',
    color_mode='grayscale',
    follow_links=True )
4

1 回答 1

0

你的情况有些问题。首先,图像数量非常少。刮掉更多图像并使用增强。其次,我见过的典型分数是:

从总数据来看:

80% 用于火车

20% 用于验证。

将您选择的图像放入具有该比例的文件夹中。

第三,如果您将此行放在flow_from_directory调用中的最后一行之后(并在最后一行之后放置一个逗号),您可以检查您的代码是否生成数据:

save_to_dir='folder_to_see_augmented_images'

然后运行模型(编译,然后拟合)并检查save_to_dir文件夹的内容。

于 2020-08-16T18:34:23.260 回答