Python Keras ImageDataGenerator中的图像校正

Python Keras ImageDataGenerator中的图像校正,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,关于ImageDataGenerator,我有两个问题: 1) 是在整批图像上使用相同的增强,还是每个图像都有自己的随机变换? e、 g.对于旋转,模块是否以相同的角度旋转批次中的所有图像,或每个图像获得随机旋转角度 2) ImageDataGenerator.flow中的数据无限期循环(成批)。有没有一种方法可以阻止这个无限循环,也就是只进行n次的扩充。因为我需要在每个步骤(而不是每个历元)中修改批处理大小。 谢谢回答者: 1) 是在整批图像上使用相同的增强,还是每个图像都有自己的随机变换?e

关于ImageDataGenerator,我有两个问题:

1) 是在整批图像上使用相同的增强,还是每个图像都有自己的随机变换? e、 g.对于旋转,模块是否以相同的角度旋转批次中的所有图像,或每个图像获得随机旋转角度

2) ImageDataGenerator.flow中的数据无限期循环(成批)。有没有一种方法可以阻止这个无限循环,也就是只进行n次的扩充。因为我需要在每个步骤(而不是每个历元)中修改批处理大小。 谢谢

回答者:

1) 是在整批图像上使用相同的增强,还是每个图像都有自己的随机变换?e、 g.对于旋转,模块是否以相同的角度旋转批次中的所有图像,或每个图像获得随机旋转角度

每个样本都有不同的唯一变换(例如,在一定范围内的随机旋转)

2) ImageDataGenerator.flow中的数据无限期循环(成批)。有没有一种方法可以阻止这个无限循环,也就是只进行n次的扩充。因为我需要在每个步骤(而不是每个历元)中修改批处理大小。谢谢

不清楚这里是什么意思。但是,如果您使用的是
model.fit\u生成器(ImageDataGenerator.flow())
,则可以指定
samples\u per\u epoch=…
以仅从生成器生成特定数量的样本。如果需要批次级粒度,可以执行以下操作:

for x, y in model.fit_generator(ImageDataGenerator.flow()):
  model.train_on_batch(x, y)

在这种情况下,您只需在需要的任何批次之后
中断
(这是一个循环)。

@Neal:谢谢您的快速回答!你是对的,我可能需要更好地解释我的任务。我的工作在某种程度上类似于对视频序列进行分类,但我的数据保存在数据库中。我希望我的代码在一个历元内遵循以下步骤:
对于i in(序列的数量):

  • 得到N,序列i中的帧数(我认为是 相当于批次大小,每个序列的N个数为 已保存在列表中)
  • 从我的数据库及其标签中获取N个连续帧: X_火车,y_火车
  • 对于范围内的j(旋转次数):-
  • 在序列的所有帧上执行(相同的)数据扩充(可能使用
    datagen=ImageDataGenerator()
    datagen.flow())
  • 在X,y上训练网络
  • 我的第一个想法是使用model.fit_生成器(generator=ImageDataGenerator().flow()),但这样,我就不能修改批处理大小,老实说,我不理解您的解决方案。 很抱歉写了这么长的帖子,但我仍然是python和NN的新手,但我确实是Keras的忠实粉丝;) Thnx