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

使用Keras图像生成器进行数据扩充使训练速度非常慢

  •  1
  • reshadshuvo123  · 技术社区  · 8 年前

    我有一个大数据集。数据约为10万。我使用 图像数据生成器 .但这使得培训过程非常缓慢。如果没有keras图像生成器功能,训练过程大约需要3分钟,但当我使用ImageDataGenerator功能时,大约需要3个多小时。我将此代码用于图像增强。如何提高性能?

    datagen = ImageDataGenerator(horizontal_flip=True,
                                 vertical_flip=True,
                                 featurewise_center=True,
                                 featurewise_std_normalization=True,
                                 zoom_range=0.2,
                                 rotation_range=90.)
    datagen.fit(data)
    epochs = 50
    
    model.fit_generator(datagen.flow(data, label, batch_size=128),
                        steps_per_epoch=patches.shape[0],
                        epochs=epochs)
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Chris Farr    8 年前

    这里有一些事情可以尝试。

    预处理输入

    我不熟悉使用此参数 featurewise_std_normalization=True ,但我会尝试使用预处理函数。如果在每个批次上计算此转换,则可能会消耗大量资源。您可以在培训之前转换所有数据,以避免常量计算。

    降维

    如果图像尺寸大于224x224,则可以缩小图像尺寸。在许多情况下,你甚至可以试着缩小尺寸。

    减少每个历元的步数

    查看每个历元的步骤。根据上面的代码(patches.shape[0]),我不确定现在输入的是什么,但如果训练速度太慢,我不会比data\u size//batch\u size高出很多(你可以再高一些,因为它会增加数据,但需要更多的时间)。

    升级设备 如果这些都不起作用,如果你还没有GPU,我建议你使用GPU。如果这是在CPU上完成的,那么这就是原因。对于CPU来说,图像变换是相对较大的矩阵计算。