代码之家  ›  专栏  ›  技术社区  ›  AaronDT

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

  •  0
  • AaronDT  · 技术社区  · 7 年前

    我想使用KERS提供的图像增强片将我的图像加载到内存中 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)
    

    但是,我希望将整个数据集(可能是扩充的)存储到 x y . 我怎样才能做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Daniel Möller    7 年前
    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)
    

    注意,这不会导致显著的增加。您将得到与原始数据相同数量的样本。

    为了使增强真正起作用,您需要使用这个生成器反复训练,以便它生成相同图像的许多不同随机版本。