我正在训练一个Nt = 148 + Nv = 37图像的简单CNN,分别用于训练和验证。我之所以使用ImageGenerator.flow_from_directory()
方法是因为我计划将来使用数据扩充,但是暂时我不希望任何数据扩充。我只想从磁盘一张一张地读取图像(每张图像一次,这对于验证非常重要),以避免将所有图像都加载到内存中。
但是以下情况使我认为发生了与预期不同的事情:
(*)最后,我发现我两者都使用的批处理大小为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 )
答案 0 :(得分:0)
您遇到的一些问题。 首先,该图像量非常低。废弃更多图像并使用增强功能。 其次,我看到了典型的分数:
总数据中:
火车的80%
20%进行验证。
将选择的图像按该比例放置在文件夹中。
第三,您可以检查是否将代码行插入到flow_from_directory
调用的最后一行之后(并在最后一行之后加上逗号):
save_to_dir='folder_to_see_augmented_images'
然后运行模型(编译,然后拟合)并检查save_to_dir
文件夹的内容。