tensorflow中的关闭会话不会重置图形

tit*_*tus 9 python tensorflow

当前图表中可用的节点数量在每次迭代时都会增加.由于会话关闭,这似乎不直观,并且应该释放所有资源.即使在创建新会话时,之前节点仍然存在延迟的原因是什么?这是我的代码:

for i in range(3):
    var = tf.Variable(0)
    sess = tf.Session(config=tf.ConfigProto())
    with sess.as_default():
        tf.global_variables_initializer().run()
        print(len(sess.graph._nodes_by_name.keys()))
    sess.close() 
Run Code Online (Sandbox Code Playgroud)

它输出:

5
10
15
Run Code Online (Sandbox Code Playgroud)

Mad*_*bat 17

关闭会话不会按设计重置图形.如果你想重置图表,你可以tf.reset_default_graph()像这样打电话

for _ in range(3):
    tf.reset_default_graph()
    var = tf.Variable(0)
    with tf.Session() as session:
        session.run(tf.global_variables_initializer())
        print(len(session.graph._nodes_by_name.keys()))
Run Code Online (Sandbox Code Playgroud)

或者你可以做这样的事情

for _ in range(3):
    with tf.Graph().as_default() as graph:
        var = tf.Variable(0)
        with tf.Session() as session:
            session.run(tf.global_variables_initializer())
            print(len(graph._nodes_by_name.keys()))
Run Code Online (Sandbox Code Playgroud)


小智 2

在 Spyder 中运行 TensorFlow 程序时,我遇到了会话关闭问题。RNN 单元似乎仍然存在,并且寻求创建同名的新单元似乎会引起问题。这可能是因为从 Spyder 运行时,即使程序已从 Spyder 中完成“运行”,基于 C 的 TensorFlow 会话也无法正确关闭。Spyder 必须重新启动才能获得新会话。从 Spyder 中运行时,在单元格上设置“reuse=True”可以解决此问题。然而,在训练 RNN 单元时,这似乎不是迭代编程的有效模式。在这种情况下,可能会发生一些意想不到的结果/行为,而观察者不知道发生了什么。