ImageDataGenerator是否向我的数据集中添加更多图像?

stu*_*t17 9 python machine-learning computer-vision keras tensorflow

我正在尝试使用Inception V3模型进行图像分类。ImageDataGeneratorKeras 是否会创建新图像并添加到我的数据集中?如果我有1000张图像,是否可以使用此功能将其翻倍到用于训练的2000张图像?有没有一种方法可以知道创建了多少图像并将这些图像输入到模型中?

Mar*_*rko 26

这是我的尝试回答,因为我也有这个问题。

ImageDataGenerator不会将新图像添加到您的数据集,因为它不会使您的时代变大。相反,在每个 epoch 中,它都会提供稍微改变的图像(取决于您的配置)。不管你有多少个时代,它总是会生成新的图像。

所以在每个 epoch 模型都会在不同的图像上进行训练,但不会有太大的不同。这应该可以防止过度拟合,并以某种方式模拟在线学习。

所有这些更改都发生在内存中,但如果您想查看这些图像,您可以将它们保存到光盘中,检查它们,查看其中生成了多少并了解其ImageDataGenerator工作原理。要做到这一点,传递save_to_dir=/tmp/img-data-gen-outputs给函数flow_from_directory。请参阅文档


tod*_*day 15

简短的答案: 1)所有原始图像仅在每个时期都经过转换(即旋转,缩放等),然后用于训练,并且2)[因此]每个时期中的图像数量等于原始图像的数量你有。

长答案:在每个时期,都会对ImageDataGenerator您拥有的图像进行转换,并使用转换后的图像进行训练。转换集包括旋转,缩放等。通过这种方式,您正在以某种方式创建新数据(即,也称为数据增强),但是显然生成的图像与原始图像并不完全不同。这样,当在相同图像的不同变体上对其进行训练时,所学习的模型可能更加健壮和准确。

您需要将method 的steps_per_epoch参数设置fitn_samples / batch_size,其中n_samples是您拥有的训练数据的总数(即您的情况下为1000)。这样,在每个时期中,每个训练样本仅增加一次,因此在每个时期中将生成1000个变换图像。

  • @Marko,我很抱歉,但我认为简单的“不”确实是含糊不清的。此外,它是目前这个问题得票最高的答案,所以也许其他人不会觉得它含糊不清。不管怎样,让我知道哪一部分对你来说不明确或复杂,我会解释它。不要忘记 SO 不是论坛,而应该是像维基百科一样的 **QA 知识库**。 (5认同)
  • @captainst 增强在这里并不是指增加(完全不同的)训练样本的数量。相反,它是创建**现有**训练样本的不同变体的过程。因此,正如我所提到的,生成的图像与现有的训练样本并没有完全不同;相反,它们只是它们的随机变换。这就是为什么将 `steps_per_epoch` 设置为 `n_samples / batch_size` 以外的任何值都是没有意义的。如果您执行`step_per_epoch = 2*(n_samples / batch_size)`,那么每个epoch 实际上将是正常情况下的两个epoch。 (2认同)

Ioa*_*ios 5

正如这里 正式写的那样ImageDataGenerator,具有实时数据增强的张量图像数据的批处理生成器。数据将被循环(分批)。这意味着将即时将变换随机应用于一批图像。例如:

train_datagen = ImageDataGenerator(
    rescale=1./255, #scale images from integers 0-255 to floats 0-1.
    shear_range=0.2,
    zoom_range=0.2, # zoom in or out in images
    horizontal_flip=True) #horizontal flip of images
Run Code Online (Sandbox Code Playgroud)

在每个新的时代,都会应用新的随机变换,这样我们一次就可以训练出稍微不同的图像。并非总是能够获得或获得更多数据,使用ImageDataGenerator这种方式很有帮助。

  • 又一个无法回答的问题,根本就没有清楚、明确地回答问题。就不能在最后写“是”或“否”吗? (6认同)