使用flow_from_directory进行培训和验证,无需增加

时间:2019-06-03 15:12:43

标签: keras data-augmentation

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

但是以下情况使我认为发生了与预期不同的事情:

    训练和验证准确性达到的值与以148或37为分母的分数不同。实际上,尝试从三角数的一个约数中估算一个合理的分母会导致数字远大于148(大约534或551,请参阅下文(*),为什么我认为它们应该是19的倍数)和37的倍数。
  1. 验证训练数据集和验证数据集上的所有预测(使用单独的程序,该程序仅读取验证目录一次,并且不使用上述生成器),显示出许多不完全的失败(1-val_acc )*我期望的NV

(*)最后,我发现我两者都使用的批处理大小为19,所以我希望我每个时期提供19 * 7 = 133或19 * 8 = 152训练图像,并提供19或38图像作为验证在每个时代结束时设置。

顺便说一句:可以将model.fit_generator()ImageGenerator.flow_from_directory()构建的生成器一起使用来实现: -没有数据扩充 -两个生成器应分别将每个图像分别提供给训练过程和验证过程一次 -改组是很好的,并且是实际需要的,因此每个时期运行的不同

同时,我将自己的批次大小设置为等于验证集长度(即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 )

1 个答案:

答案 0 :(得分:0)

您遇到的一些问题。 首先,该图像量非常低。废弃更多图像并使用增强功能。 其次,我看到了典型的分数:

总数据中:

火车的80%

20%进行验证。

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

第三,您可以检查是否将代码行插入到flow_from_directory调用的最后一行之后(并在最后一行之后加上逗号):

save_to_dir='folder_to_see_augmented_images'

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