我有两个关于ImageDataGenerator的问题:
1)在整个批次或每个图像上使用相同的扩充是否有自己的随机转换? 例如为了旋转,模块是否以相同的角度旋转批次中的所有图像,或者每个图像获得随机旋转角度?
2)ImageDataGenerator.flow中的数据无限期地循环(批量)。有没有办法阻止这种无限循环,即仅在n次上进行增强。因为我需要在每一步(而不是每个纪元)中修改batch_size。 感谢
答案 0 :(得分:1)
来自Francois Chollet的答案:
1)在整个批次或每个图像上使用相同的扩充是否有自己的随机转换?例如为了旋转,模块是否以相同的角度旋转批次中的所有图像,或者每个图像获得随机旋转角度?
每个样本都有不同的唯一变换(例如,在一定范围内的随机旋转)。
2)ImageDataGenerator.flow中的数据无限期地循环(批量)。有没有办法阻止这种无限循环,即仅在n次上进行增强。因为我需要在每一步(而不是每个纪元)中修改batch_size。感谢
不清楚这里的意思。但是,如果您使用model.fit_generator(ImageDataGenerator.flow())
,则可以指定samples_per_epoch=...
仅从生成器中生成特定数量的样本。如果您想要批量级粒度,可以执行以下操作:
for x, y in model.fit_generator(ImageDataGenerator.flow()):
model.train_on_batch(x, y)
在这种情况下,您可以在任意数量的批次之后break
(它是一个循环)。
答案 1 :(得分:0)
@Neal:谢谢你的快速回答!你是对的,我可能需要更好地解释我的任务。我的工作在某种程度上类似于对视频序列进行分类,但我的数据保存在数据库中。我希望我的代码遵循这个步骤一个时代:
对于i in(number_of_sequences):
datagen = ImageDataGenerator()
和datagen.flow())
我的第一个想法是使用model.fit_generator(generator = ImageDataGenerator()。flow())但这样,我无法修改我的batch_size,说实话,我不明白你的解决方案。 很抱歉很长的帖子,但我仍然是python和NN的新手,但我真的是Keras的忠实粉丝;) 日Thnx!