Keras-将图像从生成器加载到内存

时间:2018-12-12 19:05:49

标签: python tensorflow keras

我想利用keras ImageDataGenerator提供的图像增强选项将图像加载到内存中。因此,我正在像这样创建自己的生成器:

testgen = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet.preprocess_input)

test_generator = testgen.flow_from_dataframe(dataframe=df_test, 
                                             classes=class_labels, 
                                             directory=data_dir,
                                             x_col=training_on, 
                                             y_col=target, 
                                             has_ext=True, 
                                             class_mode="categorical", 
                                             target_size=(224,224), 
                                             batch_size=batch_size,
                                             seed = 1,
                                             shuffle=False)

现在我可以使用以下方法获得一个批次:

x,y = next(test_generator)

但是,我想将整个数据集(可能是扩充的)存储到xy中。我该如何实现?

1 个答案:

答案 0 :(得分:1)

xTrain = list()
yTrain = list()
for i in range(len(test_generator)):
    x,y = test_generator[i] 
    xTrain.append(x)
    yTrain.append(y)

xTrain = np.array(xTrain)
yTrain = np.array(yTrain)

替代:

xTrain = list()
yTrain = list()
for i in range(number_of_batches):
    x,y = next(test_generator)
    xTrain.append(x)
    yTrain.append(y)

xTrain = np.array(xTrain)
yTrain = np.array(yTrain)

请注意,这不会导致明显的扩充。您最终将获得与原始数据相同数量的样本。

为使扩增真正起作用,您需要反复使用此生成器进行训练,以便生成相同图像的许多不同随机版本。