Keras:flow_from_目录在fit_生成器调用期间保存了太多图像

Keras:flow_from_目录在fit_生成器调用期间保存了太多图像,keras,generator,Keras,Generator,我有以下列车/验证代码: #我们创建两个具有相同参数的实例 图像数据根参数=dict(旋转范围=90.0,重缩放=1/255.0) 掩码数据根参数=dict(旋转范围=90.0,重缩放=1/255.0) 序列图像数据发生器=图像数据发生器(**图像数据发生器参数) 序列掩码数据发生器=图像数据发生器(**掩码数据发生器参数) 验证\u image\u datagen=ImageDataGenerator() 验证\u掩码\u数据源=图像数据生成器(**掩码\u数据\u数据源参数) #提供相同的种

我有以下列车/验证代码:

#我们创建两个具有相同参数的实例
图像数据根参数=dict(旋转范围=90.0,重缩放=1/255.0)
掩码数据根参数=dict(旋转范围=90.0,重缩放=1/255.0)
序列图像数据发生器=图像数据发生器(**图像数据发生器参数)
序列掩码数据发生器=图像数据发生器(**掩码数据发生器参数)
验证\u image\u datagen=ImageDataGenerator()
验证\u掩码\u数据源=图像数据生成器(**掩码\u数据\u数据源参数)
#提供相同的种子流方法
种子=1
train\u image\u generator=来自\u目录的train\u image\u datagen.flow\u(
abs\u父项\u列车\u图像\u路径,
class_模式=无,
种子=种子,
follow_links=True,#我们将图像符号链接到临时目录
批次大小=1,
洗牌=正确,
目标大小=(图像大小,图像大小))
序列掩码生成器=序列掩码数据生成目录中的流(
abs\u家长\u列车\u屏蔽\u路径,
class_模式=无,
种子=种子,
批次大小=1,
洗牌=正确,
目标大小=(图像大小,图像大小),
color\u mode=“灰度”,
保存到\u目录=abs\u父项\u列车\u路径)
validation\u image\u generator=来自\u目录的validation\u image\u datagen.flow\u(
abs\u父级\u测试\u图像\u路径,
class_模式=无,
种子=种子,
follow_links=True,#我们将图像符号链接到临时目录
批次大小=1,
洗牌=正确,
目标大小=(图像大小,图像大小))
验证\u掩码\u生成器=验证\u掩码\u datagen.flow\u来自\u目录(
abs\u父级\u测试\u屏蔽\u路径,
class_模式=无,
种子=种子,
批次大小=1,
洗牌=正确,
目标大小=(图像大小,图像大小),
color\u mode=“灰度”,
保存到\u目录=abs\u父项\u测试\u掩码\u路径)
#将生成器组合成一个生成图像和遮罩的生成器
序列生成器=itertools.izip(序列映像生成器、序列掩码生成器)
验证\生成器=itertools.izip(验证\图像\生成器、验证\掩码\生成器)
#测试发电机的节能
对于idx,在枚举中配对(验证\u生成器):
打印(idx)
打印('迭代')
如果idx>=0:
打破
modeler.model.fit\u生成器(生成器=系列生成器,
每个历元的步数=1,
验证数据=验证生成器,
验证步骤=1,
纪元=1,
回调=回调\u列表,
详细=1)
四个序列/验证目录在所需的
目录/子目录/image
组织中有一个图像或掩码,用于
从\u目录流\u
。因此,目录结构被认为不是问题所在。培训期间,kera的打印件进一步证实了这一点:

找到了属于1个类的1个图像。
找到属于1个类的1个图像。
找到属于1个类的1个图像。
找到属于1个类的1个图像。
我注意到,
fit\u generator
在每次列车运行时保存多个图像。 由于,历元、每个历元的步数、验证步数和图像/掩码数(用于训练/验证)都等于1,因此我希望在调用
fit\u生成器
的过程中准确地保存一张图像。然而,数字似乎是9(相同的图像,但每个具有不同的旋转)

有趣的是,这似乎是
fit_generator
的结果,而不是
ImageDataGenerator
类的结果,因为我可以在
for
循环迭代
validation_generator
之后中断,并在每次迭代
for
循环时只保存一个图像(如预期)

有什么我做错了吗? 这是预期的行为(为什么)


谢谢

fit_生成器功能有两个附加参数,这两个参数可能是观察到的行为的原因:

  • workers
    的默认值
    =1
    表示将使用额外的线程加载图像。线程将从提供的生成器中获取图像并将其放入队列中
  • max\u queue\u size
    默认值
    =10
    是此队列的最大长度。当调用
    fit_generator
    返回时,排队器线程将停止,但在此之前,它将继续用图像填充队列,即使其中一些图像不再需要

谢谢!将
workers=0
添加到
fit\u generator
evaluate\u generator
会将每次调用中保存的图像数分别减少到1。