我有一堆函数,它们创建了计算图的一部分。在一些这样的功能中我做
with tf.name_scope("my_scope_name"):
self._eye_n_components = tf.eye(se...
在最顶层的功能开始时,我打电话给
tf.reset_default_graph()
然后调用那些部分功能,他们也可以互相呼叫。
不幸的是,我收到了错误
错误:不要使用tf.reset_default_graph()来清除嵌套图。如果 您需要清除图表,退出嵌套并创建新图表。
几个问题。
1)什么是嵌套以及如何"退出嵌套"?
2)如何创建新图表?
3)如何捕捉,我进入筑巢的地方?
4)如何清除整个图形以使tensorflow不认为我试图清除嵌套的图形?
答案 0 :(得分:19)
在以下某种情况下调用tf.reset_default_graph()
时会显示此错误消息:
with graph.as_default():
区内。with tf.Session():
区内。tf.InteractiveSession
和致电sess.close()
。这些方案中的每一个都涉及注册默认(可能是"嵌套")tf.Graph
对象,当您退出块(或关闭tf.InteractiveSession
)时,该对象将被取消注册。在这些情况下重置默认图表会使系统处于不一致状态,因此您应该在调用tf.InteractiveSession
之前确保退出阻止(或关闭tf.reset_default_graph()
)。
答案 1 :(得分:0)
我通过关闭会话并再次加载神经网络模型来解决。
我的答案是:
(1)退出with...
块或sess.close()
(2)加载神经网络模型(以及训练的权重),例如:
gd = tf.GraphDef.FromString(open(checkpoint + '_frozen.pb', 'rb').read())
inp, predictions = tf.import_graph_def(gd, return_elements=['input:0', 'MobilenetV2/Predictions/Reshape_1:0'])
(3)打印model
时,您可能会看到Tensorflow对象<VSR.Backend.TF.Framework.Trainer.VSR object at 0x000001E5DA53C898>
(4)我从here听到了tf.reset_default_graph()
和tf.keras.backend.clear_session()
,但我从未使代码正常工作。