如何在内存中增加数据?

时间:2018-01-10 20:15:37

标签: python numpy keras

我尝试了解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)

为了确保在任何情况下原始数据都在训练集中,我用原始数据初始化数据列表,但这可能是多余的。此代码是否会产生具有真正不同数据的数组?我没办法检查这个,除了我看到形状增加了可能的预期。

1 个答案:

答案 0 :(得分:0)

您的代码应该有效。但请注意,您不需要像在for循环中那样手动组装数据集。 flow()只会无限期地产生批次(即直到你的model.train_generator()停止)。

您可以通过将生成的样本保存在文件中来检查它们。只需使用以下参数flow()

  

save_to_dir:无或str(默认值:无)。这样可以达到最佳效果   指定要保存增强图片的目录   生成(用于可视化您正在做的事情)。

相关问题