使用 Keras 图像生成器进行数据扩充使训练非常缓慢
Data augmentation using Keras image generator makes training very slow
我有一个大数据集。数据约为100k。我使用 ImageDataGenerator 进一步增强了数据。但它使训练过程非常缓慢。如果没有 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)
这里有一些尝试。
预处理输入
我不熟悉使用此参数 featurewise_std_normalization=True
,但我会尝试使用预处理函数。如果它在每个批次上计算这种转换,那么它可能会消耗大量资源。您可以在训练之前转换所有数据以避免不断的计算。
降维
如果图片大于 224x224,您可以缩小图片的尺寸。在许多情况下,您甚至可以尝试变小。
减少每个时期的步数
看看每个时期的步数。根据上面的代码 (patches.shape[0]),我不确定现在输入的是什么,但如果训练是,我不会比 data_size // batch_size 高多少这么慢(你可以走得更高,因为它正在增加数据,但它需要更多时间)。
升级装备
如果 none 有效,我建议您购买 GPU(如果您还没有的话)。如果这是在 CPU 上完成的,那就可以解释了。图像变换是 CPU.
相对较大的矩阵计算
我有一个大数据集。数据约为100k。我使用 ImageDataGenerator 进一步增强了数据。但它使训练过程非常缓慢。如果没有 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)
这里有一些尝试。
预处理输入
我不熟悉使用此参数 featurewise_std_normalization=True
,但我会尝试使用预处理函数。如果它在每个批次上计算这种转换,那么它可能会消耗大量资源。您可以在训练之前转换所有数据以避免不断的计算。
降维
如果图片大于 224x224,您可以缩小图片的尺寸。在许多情况下,您甚至可以尝试变小。
减少每个时期的步数
看看每个时期的步数。根据上面的代码 (patches.shape[0]),我不确定现在输入的是什么,但如果训练是,我不会比 data_size // batch_size 高多少这么慢(你可以走得更高,因为它正在增加数据,但它需要更多时间)。
升级装备 如果 none 有效,我建议您购买 GPU(如果您还没有的话)。如果这是在 CPU 上完成的,那就可以解释了。图像变换是 CPU.
相对较大的矩阵计算