训练过大而无法放入RAM的数据集

时间:2018-08-06 05:01:07

标签: tensorflow

我正在使用TensorFlow在非常大的数据集上进行训练,该数据集太大而无法放入RAM。因此,我已将数据集拆分为硬盘上的多个分片,并且使用tf.data.Dataset类将分片数据加载到GPU内存中的tf.placeholder中。为了训练这些碎片,我正在考虑两种方法,但是我不知道哪种方法是最佳实践。他们是:

1)对于每个时期,依次加载每个数据集分片,并在每个分片上训练一次迭代。

2)对于每个时期,依次加载每个数据集分片,然后对每个分片进行多次训练。

1)的问题是从硬盘驱动器加载每个数据集碎片需要很长时间,并且由于每个碎片仅在每次迭代中进行训练,因此花费了整个训练时间的很大一部分来加载此数据。但是,2)的问题在于,连续对同一分片进行多次训练将使优化更有可能收敛到局部最小值。

推荐哪种方法?

1 个答案:

答案 0 :(得分:0)

Dataset类绝对是为数据量太大而无法放入RAM的用例设计的。如果您还没有看过该性能指南,则值得阅读:https://www.tensorflow.org/performance/datasets_performance

首先,我要看看在数据集管道末尾的数据读取代码+ prefetch之后对prefetch to device的策略性使用是否可以帮助掩盖ETL过程“提取”阶段的延迟

我还建议改组文件的加载顺序,并使用数据集改组操作来避免您描述的局部最小值-理想情况下,示例也应以随机顺序开始。如果您当前正在使用python代码加载数据,则可能值得考虑将数据预处理为例如TFRecord格式,以便您可以受益于TFRecordDataset的本机性能。

有用的其他信息:

  1. 您是在一台机器还是一台集群上进行培训?
  2. 数据格式是什么?当前如何加载?