我有一个大数据集。数据大约是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)
答案 0 :(得分:0)
以下是一些可以尝试的事情。
预处理输入
我不熟悉使用此参数featurewise_std_normalization=True
,但我会尝试使用预处理函数。如果它在每个批次上计算这种转换,那么它可能会消耗大量资源。您可以在训练之前转换所有数据,以避免不断计算。
降低维度
如果图像的尺寸大于224x224,则可以缩小尺寸。在很多情况下你甚至可以尝试变小。
每个时期减少步数
看看每个时期的步骤。我不确定现在基于上面的代码输入什么(patches.shape [0])但是如果训练那么慢,我不会比data_size // batch_size高得多(你可以更高,因为它增加了数据但需要更多时间。)
升级设备 如果这些都不起作用,我建议你拿一个GPU,如果你还没有。如果这是在CPU上完成的,那就解释了它。图像变换是CPU的相对较大的矩阵计算。