1. 程式人生 > >Session.run()和Tensor.eal()的區別

Session.run()和Tensor.eal()的區別

一、解釋1

簡單點說就是:
你可以使用sess.run()在同一步獲取多個tensor中的值,使用Tensor.eval()時只能在同一步當中獲取一個tensor值,並且每次使用 eval 和 run時,都會執行整個計算圖。

第一段翻譯:
如果t是一個tf.Tensor物件,則tf.Tensor.eval是tf.Session.run的縮寫(其中sess是當前的tf.get_default_session。下面的兩個程式碼片段是等價的:
在這裡插入圖片描述

第二段翻譯:
在第二個示例中,會話充當上下文管理器,其作用是將其安裝為with塊的生命週期的預設會話。 上下文管理器方法可以為簡單用例(比如單元測試)提供更簡潔的程式碼; 如果您的程式碼處理多個圖形和會話,則可以更直接地對Session.run()進行顯式呼叫。

二、解釋2

如果你有一個Tensort,在使用t.eval()時,等價於:tf.get_default_session().run(t).

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中的值,如:

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