Tensorflow:.run()和.eval()區別

Tensorflow:.run()和.eval()區別

eval() 其實就是tf.Tensor的Session.run() 的另一種寫法,但二者有差異

1.eval(): 將字符串string對象轉化爲有效的表達式參與求值運算返回計算結果
2.eval()也是啓動計算的一種方式。基於Tensorflow的基本原理,首先須要定義圖,而後計算圖,其中計算圖的函數常見的有run()函數,如sess.run()。一樣eval()也是此類函數,
3.要注意的是,eval()只能用於tf.Tensor類對象,也就是有輸出的Operation。對於沒有輸出的Operation, 能夠用.run()或者Session.run();Session.run()沒有這個限制。python

Tensor.run和Tensor.eval的區別

在會話中須要運行節點,會碰到兩種方式:Session.run()和Tensor.eval()session

解釋一
圖片描述函數

1.若是t是一個tf.Tensor對象,則tf.Tensor.eval是tf.Session.run的縮寫(其中sess是當前的tf.get_default_session。下面的兩個代碼片斷是等價的:
2.在第二個示例中,會話充當上下文管理器,其做用是將其安裝爲with塊的生命週期的默認會話。 上下文管理器方法能夠爲簡單用例(好比單元測試)提供更簡潔的代碼; 若是您的代碼處理多個圖形和會話,則能夠更直接地對Session.run()進行顯式調用。單元測試

解釋二測試

若是你有一個Tensor t,在使用t.eval()時,等價於:tf.get_default_session().run(t).
舉例:lua

t = tf.constant(42.0)
sess = tf.Session()
with sess.as_default():   # or `with sess:` to close on exit
    assert sess is tf.get_default_session()
    assert t.eval() == sess.run(t)

這其中最主要的區別就在於你能夠使用sess.run()在同一步獲取多個tensor中的值,
例如:spa

t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
   tu.eval()  # runs one step
   ut.eval()  # runs one step
   sess.run([tu, ut])  # evaluates both tensors in a single step

注意到:每次使用 eval 和 run時,都會執行整個計算圖,爲了獲取計算的結果,將它分配給tf.Variable,而後獲取。code

相關文章
相關標籤/搜索