如何在tensorflow中清除/删除张量?

9
据我理解,tf.reset_default_graph()只是创建一个新的图并将其设置为默认图。因此,之前创建的张量将仍然占用内存。我还读过未引用的张量不会被垃圾回收(就像Python中的普通变量一样)。
如果我正在运行交叉验证以搜索一组超参数,并且因此再次创建相同的图形,则如何摆脱先前创建的张量?

1
你找到答案了吗? - SantoshGupta7
这与Tensorflow删除图并释放资源相关或重复。@SantoshGupta7在交叉验证等设置中,图和张量通常不应占用太多空间,但会话(存储变量值和汇集训练资源的地方)可能会占用大量空间。当图被“冻结”(变量转换为常量)和/或拥有非常大数量的操作时,图会变得很大。无论如何,如果您不保留对象的引用,则它们应该被垃圾回收。 - jdehesa
1
@jdehesa 我认为在TensorFlow 1中未被引用的张量并没有被垃圾回收。 - figs_and_nuts
1个回答

6

在设计实验时,我遇到了同样的问题。经过调研,唯一对我有效的解决方案是这个。如您所读到的链接中所述,似乎存在设计缺陷,而TF团队似乎不关心修复此问题。

解决方案是为每个交叉验证迭代创建一个新进程。因此,当进程完成后,系统将自动终止它并释放资源。

import multiprocessing

def evaluate(...):
    import tensorflow as tf
    # Your logic

for ... in cross_valiadtion_loop:
    process_eval = multiprocessing.Process(target=evaluate, args=(...))
    process_eval.start()
    process_eval.join()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接