为什么在这种情况下feed_dict使用更少的内存?

时间:2019-02-09 21:00:58

标签: python tensorflow

为什么feed_dict使用的GPU内存少于.from_tensor_slices? 我认为在下一行中,Tensorflow会在迭代GPU中的数据之前将全部数据加载到GPU。

sess.run(iterator.initializer, feed_dict={features_placeholder: features,
                                              labels_placeholder: labels})

来自文档(https://www.tensorflow.org/guide/datasets#reading_input_data

1 个答案:

答案 0 :(得分:2)

原因是.from_tensor_slices将整个数据集存储在TensorFlow图本身中(以tf.constant的形式),而feed_dict仅传递值本身。一旦将数据分为多个批次并开始使用feed_dict逐批次将其馈送到TensorFlow,差异将显而易见,因为只有当前的批次将被复制到GPU。使用.from_tensor_slices将导致即使在一个很小的子集上进行训练,也可以一次在GPU中拥有整个数据集。

如果您一次填充整个数据集,但仍然观察到明显的差异,我猜是tf.constant操作会引入一些内存开销,因为您的数据成为计算图本身的一部分,从而导致总体而言,内存消耗更大。

查看文档 https://www.tensorflow.org/api_docs/python/tf/data/Dataset#from_tensor_slices

  

请注意,如果张量包含NumPy数组,并且未启用急切执行,则值将作为一个或多个tf.constant操作嵌入到图中。对于大型数据集(> 1 GB),这可能会浪费内存并遇到图序列化的字节限制。