Keras 使用_目录中的flow_进行培训和验证,无需扩充

Keras 使用_目录中的flow_进行培训和验证,无需扩充,keras,data-augmentation,Keras,Data Augmentation,我正在训练一个简单的CNN,其中Nt=148+Nv=37个图像分别用于训练和验证。我使用了ImageGenerator.flow\u from\u directory()方法,因为我计划在将来使用数据增强,但目前我不希望任何数据增强。我只想从磁盘上一个接一个地读取图像(每个图像只读取一次,这对验证非常重要),以避免将所有图像加载到内存中 但以下几点让我觉得发生了与预期不同的事情: 训练和验证精度达到的值与分母为148或37的分数不同。实际上,试图从三角洲的次倍数中估算出一个合理的分母,得到的数字

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

但以下几点让我觉得发生了与预期不同的事情:

  • 训练和验证精度达到的值与分母为148或37的分数不同。实际上,试图从三角洲的次倍数中估算出一个合理的分母,得到的数字远远大于148(约534或551,见下文(*),为什么我认为它们应该是19的倍数)和37的倍数
  • 验证培训数据集和验证数据集上的所有预测(使用单独的程序,只读取验证目录一次,不使用上述生成器),会显示大量失败,但不完全符合我的预期(1-val_acc)*Nv
  • (*)最后,我发现我在这两个方面使用的批大小都是19,因此我希望每个历元提供19*7=133或19*8=152个训练图像,每个历元结束时提供19或38个图像作为验证集

    顺便问一下:是否可以使用
    模型。将\u生成器()
    与从
    ImageGenerator.flow\u from\u directory()
    构建的生成器配合使用,以实现: -无数据扩充 -两个生成器应分别向培训过程和验证过程提供所有图像,每个历元仅提供一次 -洗牌是很好的,而且实际上是需要的,所以每个时代运行的都不同

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

    但我仍然不确定以下代码是否达到了“完全没有数据扩充”的要求


    你的处境中有一些问题。 首先,图像的数量非常少刮取更多图像并使用增强功能。 第二,我看到的典型分数是:

    从总体数据来看:

    火车80%

    20%用于验证

    将选定的图像按此比例放入文件夹中

    第三,如果将此行放在
    flow\u from\u目录
    调用的最后一行之后(并在最后一行后面加逗号),则可以检查代码是否生成数据:

    然后运行模型(编译,然后拟合)并检查
    保存到\u目录
    文件夹的内容

    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 )
    
    save_to_dir='folder_to_see_augmented_images'