【发布时间】:2017-12-05 09:51:02
【问题描述】:
我有一个 巨大的全局变量,用于训练和评估但形状不同。现在我尝试在同一个过程中运行评估和训练,我偶然发现了一个事实,即我不能真正删除在张量流图中定义的变量。例如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_default_graph() 的正确方法是什么?真的没有办法重新定义变量丢弃旧的可能巨大的初始化器吗?
【问题讨论】:
-
This 回答了为什么它不起作用,不确定建议的解决方案是否也适合您的问题。
-
谢谢@user1735003 - 有什么想法我可以处理这个变量(出于性能原因不能使用占位符)?
-
也许
tf.assign对你有用? (与validate_shape=False)
标签: python tensorflow