有没有办法将Tensorflow记录文件保存在内存中?

时间:2018-07-25 19:00:05

标签: tensorflow tensorflow-datasets tfrecord

这里是情况:我正在处理一个大的Tensorflow记录文件。大约50 GB。但是,我正在此培训上的机器具有128 GB的RAM。 50小于128,因此即使这是一个大文件,您仍认为可以将其保留在内存中并节省慢速的I / O运算符。但是我使用的是TFRecordDataset类,似乎整个TFRecord系统都是专门为不这样做而设计的,而且我看不出有什么方法可以强迫它将记录保留在内存中。而且由于它会在每个时期重新加载它们,所以我在从该50 GB文件读取缓慢的I / O操作上浪费了过多的时间。

我想我可以将记录加载到python中的内存中,然后使用feed_dict将它们逐个加载到我的模型中,从而绕过整个Dataset类。但这似乎是一种不太优雅的处理方式,需要重新设计。如果我可以强制TFRecordDataset将所有内容加载到内存中并将它们保存在各个纪元之间,那么一切都会变得简单得多。

1 个答案:

答案 0 :(得分:1)

您需要进行tf.data.Dataset.cache()操作。为了达到预期的效果(将文件保存在内存中),请将其放在TFRecordDataset之后,并且不提供任何参数:

  dataset = tf.data.TFRecordDataset(filenames)
  dataset = dataset.cache()

在没有参数的情况下调用cache()操作时,将在内存中进行缓存。

此外,如果对这些记录进行一些后处理,例如使用dataset.map(...),那么将cache()操作放在输入管道的末尾可能会更加有益。

更多信息,请参见“输入管道性能指南” Map and Cache section