在训练多类CNN模型时如何存储和加载5000万个25x25 numpy数组的训练数据?

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

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

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

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

首先,如何在磁盘上存储5000万个25x25 .npy阵列?最佳做法是什么?

其次,在训练期间,我应该使用数据库存储这些矩阵并从中查询吗?我认为SQLite不支持多线程,并且Tensorflow中SQL数据集的支持仍为experimental

我想知道是否有一种巧妙的方法来存储这5000万个矩阵,因此在训练过程中的检索将是最佳的。

第三,使用HDF5格式怎么办?我应该改为pytorch吗?

python tensorflow keras pytorch 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.