【问题标题】:In ImageDataGenerator data is augmented in each batch or each epoch?在 ImageDataGenerator 中,每个批次或每个时期都会增加数据?
【发布时间】:2021-08-23 04:49:40
【问题描述】:

我知道在每个 epoch 我们都有一组新的增强。但我的问题是,如果我们总共有 10 个样本图像,batch_size = 5,并且我们采用 steps_per_epoch = 3 而不是 2 个,那么我们将在每个 epoch 中传递 5*3 = 15 图像,

所以我们肯定会有重复,我的问题是如果图像x被重复,两者将具有相同或不同的增强值。
这取决于新的增强是在每批还是在每个时期发生。

谢谢,

【问题讨论】:

  • ImageDataGenerator 用于实时图像增强,如随机裁剪、缩放、翻译等。它将根据您的 batch_size 和您的原始 10 图像生成 15 新图像steps_per_epoch 随机应用这些转换。它不会简单地批量处理您的数据,因此我们不会有重复的图像。
  • 你是说每个下一张图片都有新的随机增强,而不是等待那个时期或批次完成?
  • 不,这不会一次生成 15 张新图像,因为这可能会导致更大数据集的内存限制。 ImageDataGenerator 的工作方式类似于 python generator。图像会在程序需要时动态生成。
  • 我无法清楚地理解你的答案,我是说什么时候会发生新的增强,1)在每个下一张图像上,2)在每个下一批,3)在每个下一个时期跨度>
  • 在每个纪元开始时,将生成该纪元所需的图像数量。对于您的用例,在每个 epoch 开始时,将从您的原始图像数据生成 15 个新图像。可以参考详细解答here

标签: python tensorflow machine-learning keras data-preprocessing


【解决方案1】:

增强是按时代而不是按批次发生的。

解释:

train_size = 10 
batch_size = 5
steps_per_epoch = n*(train_size//batch_size) # n is any positive integer

ImageDataGenerator 的工作原理是,在第一个 epoch 中,它将增强所有 10 个图像以生成 10 个增强图像,然后选择 1-5 个增强图像用于训练的第一步。这意味着您要用于训练的数据是由时代定义的。在第一个 epoch 的第二步中,将使用下一组增强图像,即 6-10。

在第二个 epoch 中,将生成一组新的增强图像,然后对于每一步,将使用定义数量的图像。因此,如果您每个 epoch 使用 3 个步骤,那么 10 个增强图像集中的 5 个图像将被重复。

【讨论】:

  • 所以如果steps_per_epoch = 3,那么在一个epoch中需要15张图片,所以同一张图片将在一个epoch中以相同的增强值发送多次训练?
  • 是的,对于每个 epoch 的每一步,图像集将仅从这 10 个增强图像中选择。所以很自然,如果你每个 epoch 使用 3 个步骤,就会重复 5 个图像
  • 太好了,我还有一个相关的查询,所以我只在这里问,如果我们有 train_size = 12batch_size=5steps_per_epoch = 2 ,那么每个时期将传递 10 张图像。但是我们总共有 12 个图像,那么其他 2 个会发生什么,它会在每个 epoch 中被传递还是总是被丢弃?
  • 我的错!这 2 张图片将在下一个 epoch 中使用。
  • 所以第一个时期有 2 个批次,其余 2 个图像被添加到下一个时期,因为该过程仍在为时期 1 中的第一组 12 个图像生成。我希望这是有道理的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2023-03-29
  • 2019-05-12
  • 2016-12-24
  • 2018-11-04
相关资源
最近更新 更多