TensorFlow中tf.Session用with语句未自动关闭?求原因解释
为什么用
with tf.Session()后感觉会话没自动关闭? 嘿,别担心,其实你的tf.Session已经被自动关闭啦!你之所以觉得它没关闭,大概率是因为TensorFlow不会在会话关闭时输出任何提示信息,让你产生了误解~
先给你拆解一下这段代码的逻辑:
import tensorflow as tf a = tf.constant([1,2,3]) with tf.Session() as sess: print('12') print(sess.run(a))
这里的with语句是Python的上下文管理器,它的核心作用就是自动管理资源:
- 进入
with块时,会调用tf.Session的__enter__()方法,返回会话对象sess供你使用; - 当代码执行完
with块里的所有内容(哪怕块里抛出了异常),都会自动调用tf.Session的__exit__()方法,而这个方法内部会直接调用sess.close()来关闭会话。
如果你还是不确定,可以做个小测试:在with块结束后,尝试再调用一次sess.run(a),你会立刻收到类似这样的报错:
RuntimeError: Attempted to use a closed Session.
这就直接证明会话已经被关闭了,没法再用它执行计算了。
总结一下:with tf.Session() as sess的写法完全是安全的,它会帮你自动处理会话的关闭工作,不用手动调用sess.close(),也不需要额外的提示来确认——没报错、能正常运行完代码,就说明一切都按预期在走啦😉
内容的提问来源于stack exchange,提问作者lin




