tensorflow會話-Session(), Session().as_fault() 與InteractiveSession()


在學習tensorflow過程中關於一些會話的語句不是很理解,抽空把三種主要的會話Session(), Session().as_fault(), InteractiveSession()整理下:

1.Session()

對於TF中執行會話中的語句時,需要指定是哪個會話中的函數(可能在一些項目中會生成很多個會話)。通過tf.Session()生成會話。舉個簡單的例子。

1 import tensorflow as tf
2 a = tf.constant(3, tf.float32)
3 b = tf.constant(4, tf.float32)
4 c = a+b
5 sess1 = tf.Session()
6 print(sess1.run(c))
7 print(a.eval(session = sess1))

在調用函數run,及eval需要指定是會話中的函數。或者也可以控制在sess1的一個內循環中,也可寫成如下語句

1 import tensorflow as tf
2 a = tf.constant(3, tf.float32)
3 b = tf.constant(4, tf.float32)
4 c = a+b
5 with tf.Session() as sess1:
6     print(sess1.run(c))
7     print(a.eval())

這種方式eval會默認調用sess1中的函數,(由於run函數是tf.Session()類中的函數,因此這里run前的sess1不可去掉)

2.Session().as_fault()

  •  tf.Session()創建一個會話,當上下文管理器退出時會話關閉和資源釋放自動完成。比如:
import tensorflow as tf
a = tf.constant(3, tf.float32)
b = tf.constant(4, tf.float32)
c = a+b
with tf.Session() as sess1:
    print(sess1.run(c))
print(a.eval(session = sess1))

在執行語句print(a.eval(session = sess1))時, 由於上下文管理器已經退出,會話已經關閉,因此會報錯。

 

  •  tf.Session().as_default()創建一個默認會話,當上下文管理器退出時會話沒有關閉,還可以通過調用會話進行run()和eval()操作
    import tensorflow as tf
    a = tf.constant(3, tf.float32)
    b = tf.constant(4, tf.float32)
    c = a+b
    with tf.Session().as_default()  as sess1:
        print(sess1.run(c))
    print(a.eval(session = sess1))

 tf.Session().as_default()雖然上下文管理器已經退出,但是會話沒有關閉,后面的函數還是可以調用該會話中的函數。

3.IntersectiveSession()

tf.InteractiveSession()是一種交替式的會話方式,它讓自己成為了默認的會話,也就是說用戶在單一會話的情境下,不需要指明用哪個會話也不需要更改會話運行的情況下,就可以運行起來,這就是默認的好處。這樣的話就是run和eval()函數可以不指明session啦

1 import tensorflow as tf
2 a = tf.constant(3, tf.float32)
3 b = tf.constant(4, tf.float32)
4 c = a+b
5 sess = tf.InteractiveSession()
6 print(a.eval())

簡單來說InteractiveSession()等價於:

sess=tf.Session()
with sess.as_default():

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM