代码之家  ›  专栏  ›  技术社区  ›  Mr_and_Mrs_D

在tensorflow中重置图

  •  4
  • Mr_and_Mrs_D  · 技术社区  · 9 年前

    巨大的 但形状不同 .现在我试图在同一个过程中运行评估和训练,我偶然发现,我无法真正删除tensorflow图中定义的变量。例如,建议的解决方法 here reset_default_graph() 但这似乎与图形上下文管理器无关。

    import numpy as np
    import tensorflow as tf
    
    GRAPH = tf.Graph()
    
    def train(examples):
        with GRAPH.as_default() as g:
            # actually this is huge variable
            global_var = tf.get_variable('global_var',
                                         initializer=np.full((examples, 32), 0.0),
                                         trainable=False)
    
    def evaluate(examples):
        # tf.reset_default_graph() # ValueError: Variable input_var already exists
        with GRAPH.as_default() as g: # initialized to some other size
            tf.reset_default_graph() 
            global_var = tf.get_variable('global_var',
                                         initializer=np.full((examples, 32), 0.0),
                                         trainable=False)
           # in fact tensorflow creates a new graph and does not use GRAPH to define global_var
    
    train(32)
    evaluate(8)
    

    结果:

    Traceback (most recent call last):
      File "C:/Users/MrD/.PyCharm2017.1/config/scratches/scratch_44.py", line 22, in <module>
        evaluate(8)
      File "C:/Users/MrD/.PyCharm2017.1/config/scratches/scratch_44.py", line 19, in evaluate
        trainable=False)
      File "C:\_\Python35\lib\contextlib.py", line 66, in __exit__
        next(self.gen)
      File "C:\_\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 3616, in get_controller
        if self.stack[-1] is not default:
    IndexError: list index out of range
    

    那么,使用reset\u default\u graph()的正确方法是什么?真的没有办法抛弃旧的潜在巨大初始值设定项来重新定义变量吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Mr_and_Mrs_D    8 年前

    事实证明,在图形上下文管理器中“重置默认图形”没有意义-请参阅: https://github.com/tensorflow/tensorflow/issues/11121

    AssertionError: Do not use tf.reset_default_graph() to clear nested graphs. If you need a cleared graph, exit the nesting and create a new graph.
    

    here