如何在训练具有5个类别和5000万个25x25 .npy数组的大型训练数据的多类CNN模型的过程中优化I / O?

问题描述 投票:2回答:1

我有五个类别的图像处理问题。每个类别都有大约一千万个示例作为训练数据,每个示例都是z评分的25x25 numpy数组。

显然,我无法将所有训练数据加载到内存中,因此我必须使用fit_generator

我是生成并扩充这些训练数据矩阵的人,我无法在fit_generator内实时进行此操作,因为训练模型太慢了。

我的问题是在磁盘上保留5000万个25x25 .npy阵列是最佳实践。在培训期间,我是否应该启动一些数据库来存储这些矩阵并从数据库中查询?我认为SQLite不支持多线程。我认为它仍然在张量流中experimental。我很想知道是否有一种整齐的方法来存储这5000万个矩阵,并在训练期间以足够快的速度从它们中检索出来。

HDF5格式怎么样?以某种方式使用它有意义吗?

python tensorflow keras generator hdf5
1个回答
1
投票

基本上,您需要的是一个单独的过程,该过程在您的训练过程中并行运行,并且在训练过程对前一批进行工作时会加载/准备下一批训练观察(预取),以避免任何IO和预处理延迟。

In Pytorch,有一个专门解决此问题的类torch.utils.data.DataLoaderIn TensorFlow,您可以使用tf.data.Dataset类创建所谓的输入管道。 Here is nice post如何创建这样的输入管道以及对性能提升的很好分析。

注意:有人在评论中提到50M的训练观测值很多。的确如此,但是如果您的输入是由道路和街道的高清图像组成的,并且您正在尝试训练自动驾驶汽车模型,则可能是必要的。但是因为您的输入只有25 * 25,所以如果您具有8bit的深度,那么您就有25 * 25 * 256 = 160000个潜在的不同图像。即使深度为16bit,也将是25 * 25 * 65536 =〜40M。所以我不知道您的深度,但是您的训练集中可能有很多无用的冗余。

© www.soinside.com 2019 - 2024. All rights reserved.