【问题标题】:using flow_from_directory for training and validation, without augmentation使用 flow_from_directory 进行训练和验证,无需扩充
【发布时间】:2019-06-03 15:12:43
【问题描述】:

我正在训练一个简单的 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 )

【问题讨论】:

    标签: keras data-augmentation


    【解决方案1】:

    您的情况存在一些问题。 首先,图像数量非常少。 抓取更多图像并使用增强功能。 其次,我见过的典型分数是:

    来自总数据:

    80% 用于火车

    20% 用于验证。

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

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

    save_to_dir='folder_to_see_augmented_images'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 2016-01-29
      • 1970-01-01
      • 2016-10-14
      • 2011-12-16
      • 2020-02-29
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多