我在Keras中读到了一些关于数据增强的材料,但对我来说还是有点模糊。在数据增强步骤中,是否有任何参数来控制从每个输入图像中创建的图像的数量?在这个例子中,我看不到控制从每个图像创建的图像数量的任何参数。
例如,在下面的代码中,我可以有一个参数(num_imgs),用于控制从每个输入图像创建并存储在一个名为预览的文件夹中的图像数量;但是在实时数据增强中,没有用于此目的的任何参数。
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
num_imgs = 20
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
img = load_img('data/train/cats/cat.0.jpg') # this is a PIL image
x = img_to_array(img) # this is a Numpy array with shape (3, 150, 150)
x = x.reshape((1,) + x.shape) # this is a Numpy array with shape (1, 3, 150, 150)
# the .flow() command below generates batches of randomly transformed images
# and saves the results to the `preview/` directory
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir='preview', save_prefix='cat', save_format='jpeg'):
i += 1
if i > num_imgs:
break # otherwise the generator would loop indefinitely发布于 2016-12-16 09:09:07
数据增强工作如下:在每个学习时期,在指定范围内随机选择参数的变换应用于训练集中的所有原始图像。在完成一个时代之后,即在将一个学习算法暴露于整个训练数据集之后,启动下一个学习时代,并通过对原始训练数据进行指定的转换来再次增强训练数据。
这样,每幅图像被增强的次数等于学习时代的次数。召回表格你所链接的例子
# Fit the model on the batches generated by datagen.flow().
model.fit_generator(datagen.flow(X_train, Y_train,
batch_size=batch_size),
samples_per_epoch=X_train.shape[0],
nb_epoch=nb_epoch,
validation_data=(X_test, Y_test))在这里,datagen对象将将训练集公开到model nb_epoch times,因此每个图像都将被增强nb_epoch时间。这样,学习算法几乎看不到两个完全相同的训练示例,因为在每个时代,训练示例都是随机转换的。
发布于 2016-12-16 03:13:38
这是它的基本工作原理,它只为每个输入图像生成一个图像,在所有输入图像生成一次之后,它将重新开始。
在您的示例中,由于总共只有一个输入映像,因此它将反复生成该图像的不同版本,直到有20个。
您可以在这里查看源代码,https://github.com/fchollet/keras/blob/master/keras/preprocessing/image.py
https://stackoverflow.com/questions/41174546
复制相似问题