8

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

4

2 回答 2

3

Yes. An example from official guide (Using the 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)
于 2017-08-29T22:53:53.317 回答
1

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

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

于 2017-07-16T04:20:34.970 回答