【问题标题】:Memory management in Tensorflow's Dataset APITensorflow 的数据集 API 中的内存管理
【发布时间】:2017-12-20 20:07:55
【问题描述】:

我的训练数据集太大而无法放入内存,因此我的代码一次只能从磁盘读取 1,000 条记录。现在我想使用 Tensorflow 的新 Dataset API。数据集 API 是否允许我指定要保存在内存中的记录数,或者 Tensorflow 是否会自动管理内存以便我不必这样做?

【问题讨论】:

  • 我重新审视了你的问题。 Batch_size 与 shuffle 结合使用肯定有效。

标签: tensorflow tensorflow-datasets


【解决方案1】:

是的。来自官方指南的示例(使用 Dataset API for TensorFlow Input Pipelines,https://www.tensorflow.org/programmers_guide/datasets)

filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.contrib.data.TFRecordDataset(filenames)
dataset = dataset.map(...) ## Parsing data with a user specified function
dataset = dataset.shuffle(buffer_size=10000) ## 10000: size of sample/record pool for random selection
dataset = dataset.repeat() ## None: keep repeating
dataset = dataset.batch(32) ## 32: number of samples/records per batch (to be read into memory)

【讨论】:

  • 顺序应该是随机、重复、批处理、然后预取
  • @ArtificiallyIntelligence 谢谢,按照建议更新了订单。
【解决方案2】:

如果您将通过batch_size 指定记录数。在这种情况下,TF 将只从文件中获取 batch_size 元素。您还可以指定shuffle,这将保证内存中的所有时间最多为buffer_size 元素。

我在我的 tfrecords 文件中验证了它。我有 100 个 tfrecords 文件,每个文件约为 10Gb(这比我笔记本电脑上的内存还多)。一切正常。

【讨论】:

  • 除非我忽略了一些东西,否则文档只是说一个批次:“将此数据集的连续元素组合成批次。”我没有看到任何有关内存管理或如何从磁盘读取数据的信息。此外,到目前为止我所看到的表明数据集正在替换队列,例如看到这个问题:github.com/tensorflow/tensorflow/issues/…
  • @user554481 哇,不知道。这是我第一次看到数据集,并认为这只是一个帮手。谢谢
  • 有趣.. 通常建议他的 tfrecord 文件只应使用 O(100MB)...
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 2016-10-01
  • 2019-02-08
  • 1970-01-01
  • 2018-07-12
  • 2021-09-03
  • 1970-01-01
  • 2011-05-02
相关资源
最近更新 更多