天天看點

關于tf.identity 和tf.control_dependencies

首先,從tensor的定義說起,官網的解釋為:A tensor is a generalization of vectors and matrices to potentially higher dimensions. tensor可以是Variable,Constant,Placeholder等等。但是,官網上還有一句話值得注意:Unlike tf.Tensor objects, a tf.Variable exists outside the context of a single session.run call.這個說明了variable的特殊性,這也就是 y = x 失效,而 y = tf.identity(x)有效的原因。同時,對于tf.control_dependencies,官網上有這麼句話:control_inputs: A list of Operation or Tensor objects which must be executed or computed before running the operations defined in the context. 繼續看下面的代碼:

運作的結果為:

此時y的類型為tf.Variable,不受tf.control_dependencies控制。我們把y=x換成y=x+0.0,代碼變為:

再次運作代碼,輸出為:

此時,y的類型變成了tensor類型,受tf.control_dependencies的限制,生成y之前,進行了5次自加操作。最後,換成y = tf.identity(x,name='x')。代碼如下:

運作代碼,輸出為:

tf.identity屬于tensorflow中的一個ops,跟x = x + 0.0的性質一樣,傳回一個tensor,受到tf.control_dependencies的限制,是以生效。

轉自:https://www.jianshu.com/p/6304b7c7896b