Keras ImageDataGenerator

时间:2016-11-22 09:17:52

标签: python tensorflow keras conv-neural-network

我有两个关于ImageDataGenerator的问题:

1)在整个批次或每个图像上使用相同的扩充是否有自己的随机转换? 例如为了旋转,模块是否以相同的角度旋转批次中的所有图像,或者每个图像获得随机旋转角度?

2)ImageDataGenerator.flow中的数据无限期地循环(批量)。有没有办法阻止这种无限循环,即仅在n次上进行增强。因为我需要在每一步(而不是每个纪元)中修改batch_size。 感谢

2 个答案:

答案 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):

  1. 得到N,序列i中的帧数(我想是的 相当于batch_size,每个序列的N数是 已保存在列表中)
  2. 从我的数据库及其标签中获取N个连续帧: X_train,y_train
  3. 对于范围内的j(number_of_rotation): -
    1. 对序列的所有帧执行(相同)数据扩充(可能使用datagen = ImageDataGenerator()datagen.flow())
    2. 在X,y
    3. 上训练网络
  4. 我的第一个想法是使用model.fit_generator(generator = ImageDataGenerator()。flow())但这样,我无法修改我的batch_size,说实话,我不明白你的解决方案。 很抱歉很长的帖子,但我仍然是python和NN的新手,但我真的是Keras的忠实粉丝;) 日Thnx!