我尝试了解Keras数据生成器以增加数据。我想要的是内存中的数据增强。灵感来自this answer我自己尝试了一些代码并想出了这个:
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,)
X_data = [X_train]
y_data = [y_train]
extra_factor = 3
batch_size = X_train.shape[0]
for i in range (extra_factor):
for X_batch, y_batch in datagen.flow(X_train, y_train,
batch_size=batch_size, shuffle=True,
seed=41
):
X_data.append(X_batch)
y_data.append(y_batch)
break
X_data = np.concatenate(X_data)
y_data = np.concatenate(y_data)
print ('X_data.shape =', X_data.shape, 'type =', X_data.dtype)
print ('X_data.shape =', y_data.shape, 'type =', y_data.dtype)
为了确保在任何情况下原始数据都在训练集中,我用原始数据初始化数据列表,但这可能是多余的。此代码是否会产生具有真正不同数据的数组?我没办法检查这个,除了我看到形状增加了可能的预期。
答案 0 :(得分:0)
您的代码应该有效。但请注意,您不需要像在for循环中那样手动组装数据集。 flow()
只会无限期地产生批次(即直到你的model.train_generator()
停止)。
您可以通过将生成的样本保存在文件中来检查它们。只需使用以下参数flow()
:
save_to_dir:无或str(默认值:无)。这样可以达到最佳效果 指定要保存增强图片的目录 生成(用于可视化您正在做的事情)。