tf.Session():創(chuàng)建一個會話
tf.Session().as_default():創(chuàng)建一個默認(rèn)會話
那么問題來了,會話和默認(rèn)會話有什么區(qū)別呢?TensorFlow會自動生成一個默認(rèn)的計(jì)算圖,如果沒有特殊指定,運(yùn)算會自動加入這個計(jì)算圖中。TensorFlow中的會話也有類似的機(jī)制,但是TensorFlow不會自動生成默認(rèn)的會話,而是需要手動指定。
tf.Session()創(chuàng)建一個會話,當(dāng)上下文管理器退出時會話關(guān)閉和資源釋放自動完成。
tf.Session().as_default()創(chuàng)建一個默認(rèn)會話,當(dāng)上下文管理器退出時會話沒有關(guān)閉,還可以通過調(diào)用會話進(jìn)行run()和eval()操作,代碼示例如下:
tf.Session()代碼示例:
import tensorflow as tf
a = tf.constant(1.0)
b = tf.constant(2.0)
with tf.Session() as sess:
print(a.eval())
print(b.eval(session=sess))
運(yùn)行結(jié)果如下:
1.0
RuntimeError: Attempted to use a closed Session.
在打印張量b的值時報(bào)錯,報(bào)錯為嘗試使用一個已經(jīng)關(guān)閉的會話。
tf.Session().as_default()代碼示例:
import tensorflow as tf
a = tf.constant(1.0)
b = tf.constant(2.0)
with tf.Session().as_default() as sess:
print(a.eval())
print(b.eval(session=sess))
運(yùn)行結(jié)果如下:
1.0
2.0
對于run()方法也是一樣,如果想讓默認(rèn)會話在退出上下文管理器時關(guān)閉會話,可以調(diào)用sess.close()方法。
代碼示例如下:
import tensorflow as tf
a = tf.constant(1.0)
b = tf.constant(2.0)
with tf.Session().as_default() as sess:
print(a.eval())
sess.close()
print(b.eval(session=sess))
運(yùn)行結(jié)果如下:
1.0
RuntimeError: Attempted to use a closed Session.