我正在训练一个简单的 CNN,其中 Nt=148 + Nv=37 图像分别用于训练和验证。我使用该ImageGenerator.flow_from_directory()
方法是因为我计划将来使用数据增强,但目前我不想要任何数据增强。我只想从磁盘中一张一张地读取图像(并且每张都只读取一次,这对于验证非常重要)以避免将所有图像都加载到内存中。
但以下内容让我认为正在发生与预期不同的事情:
- 训练和验证准确度达到的值不类似于以 148 或 37 作为分母的分数。实际上试图从 delta 的约数中估计一个合理的分母,导致数字远大于 148(大约 534 或 551,见下文(*)为什么我认为它们应该是 19 的倍数)和 37
- 验证训练和验证数据集上的所有预测(使用单独的程序,它只读取验证目录一次并且不使用上述生成器),显示了一些不完全是 (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 )