【问题标题】:How to clear out/delete tensors in tensorflow?如何清除/删除张量流中的张量?
【发布时间】:2018-07-06 17:55:57
【问题描述】:

据我了解,tf.reset_default_graph() 仅创建一个新图形并将其设置为等于默认图形。因此,先前创建的张量将只是在占用内存。我还阅读了未引用的张量不是垃圾收集的(就像 Python 中的普通变量一样)。

如果我正在运行交叉验证来搜索一组超参数并因此一次又一次地创建相同的图,我该如何摆脱之前创建的张量?

【问题讨论】:

  • 你找到答案了吗?
  • 这是相关的或重复的Tensorflow delete graph and free up resources@SantoshGupta7 这个问题有一点误解,在像交叉验证这样的设置中,图和张量通常不应该占用很多空间,但是会话(存储变量值并汇集资源用于训练)可能。当图形被“冻结”(变量转换为常数)和/或当它们具有 非常 大量的操作时,它们会变得很大。在任何情况下,如果您不保留对对象的引用,它们应该被垃圾回收。
  • @jdehesa 我不认为在 tensorflow 1 中未引用的张量被抓取了

标签: python tensorflow garbage-collection deep-learning


【解决方案1】:

我在设计实验时遇到了同样的问题,在研究了这个问题之后,唯一对我有用的解决方案是this one。正如您在该链接中看到的那样,这似乎是一个设计缺陷,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()

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2020-10-30
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多