Tensorflow 关于数据集太大而无法装入RAM的培训

Tensorflow 关于数据集太大而无法装入RAM的培训,tensorflow,Tensorflow,我使用TensorFlow在一个非常大的数据集上进行训练,这个数据集太大,无法放入RAM中。因此,我将数据集拆分为硬盘上的多个碎片,并使用tf.data.dataset类将碎片数据加载到GPU内存中的tf.placeholder。为了跨越这些碎片进行训练,我正在考虑两种方法,但我不知道哪一种是最佳实践。它们是: 1) 对于每个历元,按顺序加载每个数据集碎片,并在每个碎片上训练一次迭代 2) 对于每个历元,按顺序加载每个数据集碎片,然后对每个碎片进行多次训练 1)的问题是,从硬盘加载每个数据集碎片

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

1) 对于每个历元,按顺序加载每个数据集碎片,并在每个碎片上训练一次迭代

2) 对于每个历元,按顺序加载每个数据集碎片,然后对每个碎片进行多次训练

1)的问题是,从硬盘加载每个数据集碎片需要很长时间,而且由于每个碎片只在每次迭代中进行训练,因此总训练时间的很大一部分都花在加载这些数据上。然而,2)的问题在于,在同一个碎片上连续多次训练将使优化更可能收敛到局部最小值


建议采用哪种方法?

编辑:使用新链接更新答案。

Dataset类绝对是为数据太大而无法装入RAM的用例而设计的。这本书值得一读

首先,我想看看在数据集管道的末尾战略性地使用“数据读取后代码+”是否有助于隐藏ETL过程“提取”阶段的延迟

我还建议对文件加载的顺序进行无序化,并使用Dataset shuffle ops来避免您描述的局部极小值-理想情况下,示例也应该以随机顺序开始。如果您当前正在使用python代码加载数据,则可能值得考虑将数据预处理为例如TFRecord格式,以便您可以从TFRecordDataset的本机性能中获益

其他有用的信息:

  • 您是在单机上还是在集群上进行培训
  • 数据格式是什么?当前如何加载

  • 第一个链接不再可用。已编辑,指向新指南。由于tf.data中存在自动调谐,因此预取的细节可能不那么重要