为什么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)
答案 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),这可能会浪费内存并遇到图序列化的字节限制。