我正在尝试使用Inception V3模型进行图像分类。 Keras的ImageDataGenerator
是否会创建新图像并添加到我的数据集中?如果我有1000张图像,是否可以使用此功能将其翻倍到用于训练的2000张图像?有没有办法知道已经创建了多少图像,现在将它们输入到模型中?
答案 0 :(得分:6)
在每个时期,ImageDataGenerator
对您拥有的图像进行转换,并使用转换后的图像进行训练。转换集包括旋转,缩放等。通过这种方式,您以某种方式创建了新数据(即也称为数据增强),但是显然生成的图像与原始图像并没有完全不同。这样,当在相同图像的不同变体上对其进行训练时,所学习的模型可能更加健壮和准确。
您需要将steps_per_epoch
方法的fit
参数设置为n_samples / batch_size
,其中n_samples
是您拥有的训练数据的总数(即您的情况下为1000) 。这样,在每个纪元中,每个训练样本仅增加一次,因此每个纪元中将生成1000个变换图像。
答案 1 :(得分:3)
正式写成的here 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
在每个新纪元,都会应用新的随机变换,这样我们一次训练的图像数量会有所不同。并非总是能够获得或可能获得更多数据,使用ImageDataGenerator
这样是有帮助的。
答案 2 :(得分:0)
还请注意:这些增强图像未存储在内存中,它们是在训练过程中即时生成的,在训练后丢失。您无法再次阅读这些增强图像。
不存储这些图像是一个好主意,因为我们很快就会用光内存,无法存储大量图像
答案 3 :(得分:0)
当我们尝试解决数据量少的问题时,通过添加增强图像来增加数据集不是一个好主意吗?
将上面的链接作为参考,其中作者提到了在我们的训练数据集中添加增强图像的功能。
那应该怎么做,我们应该增加图像并 save_to_dir 而不是训练模型,还是应该只使用 steps_per_epoch = 2 *(n_samples / batch_size ),并在每个时期训练两倍的数据量?
答案 4 :(得分:0)
这一切都取决于您运行了多少个时期,正如@today回答的那样,将模型与生成器拟合将使生成器提供所需数量的图像,具体取决于steps_per_epoch
。
为了使事情更容易理解,请将20张图像放入两个文件夹中(模仿分类数据),从父文件夹中创建一个生成器并运行一个简单的for循环
count = 0
for image, label in my_test_generator:
count += 1
print(count)
首先,您应该确认您看到了消息Found 20 images belonging to 2 classes.
,并且循环本身不会在20次迭代后停止,但是它只会不断地递增和不断打印(我的工作量为10k,并手动停止了它)。生成器将根据需要提供尽可能多的图像,无论它们是否被放大。
答案 5 :(得分:0)
这是我的回答,因为我也想到了这个问题。
ImageDataGenerator
在某种程度上不会将新图像添加到您的数据集中,因为这不会使您的时代变得更大。取而代之的是,在每个纪元中,它将提供略有变化的图像(取决于您的配置)。无论您拥有多少个历元,它都将始终生成新图像。
因此,在每个纪元中,模型将在不同的图像上训练,但不会不同。这样可以防止过度拟合,并在某种程度上模拟在线学习。
所有这些更改都发生在内存中,但是如果您想查看这些图像,则可以将其保存到光盘中,进行检查,查看其中的许多图像是如何生成的,并了解ImageDataGenerator
的工作方式。为此,将save_to_dir=/tmp/img-data-gen-outputs
传递给功能flow_from_directory
。参见docs。
答案 6 :(得分:0)
ImageDataGenerator类确保模型收到新的 每个时期的图像变化。但它只会返回 转换后的图像,并且不会将其添加到的原始语料库 图片。如果确实如此,那么该模型将会看到 原始图像多次,这肯定会适合我们 模型。
答案 7 :(得分:0)
让我试着用一个例子以最简单的方式告诉你。
例如:
ImageDataGenerator
将 batch_size = 25
应用到数据集steps_per_epoch=total_samples/batch_size
steps_per_epoch
将等于 20
ImageDataGenerator
的说明随机转换)