2016-09-13 51 views
0

Tensorflow如何評估不依賴張量的代碼?Tensorflow如何評估不涉及張量的程序位?

如果我們有這樣的事:

graph = tf.Graph() 

with graph.as_default(): 
    x = tf.constant([[1],[2]]) 
    print("hi1") 
    y = tf.constant([[1],[1]]) 
    print("hi2") 
    z = tf.add(x,y) 
    print("hi3") 

with tf.Session(graph=graph) as sess: 
    z_output = sess.run([z]) 

我怎樣才能確保,只有當某張量像z正被評估的print()語句被執行?現在看來,所有這些都是在程序運行後立即執行的。

+0

您c應該添加tf摘要,記錄圖中變量的進度 –

回答

1

TensorFlow 不會執行圖表外的代碼(如那些print()語句);相反,這是由Python解釋器以正常順序執行的。放置它的另一種方式是:TensorFlow僅評估涉及張量的程序位。 print()語句將在您構建圖形時執行,但由於它們不向圖形添加任何節點,所以在您實際運行圖形時,它們將不會再執行(使用tf.Session()

這可能會使有道理的,如果我們看一下你的示例程序進行更詳細的做:

graph = tf.Graph() # Create a new graph to contain a TensorFlow program. 

with graph.as_default(): # By default, all created nodes will be added to `graph`. 
    x = tf.constant([[1],[2]]) # Add a constant node to `graph`. 
    print("hi1")    # Print a message *during graph construction*. 
    y = tf.constant([[1],[1]]) # Add a constant node to `graph`. 
    print("hi2")    # Print a message *during graph construction*. 
    z = tf.add(x,y)    # Add an addition node to `graph`. 
    print("hi3")    # Print a message *during graph construction*. 

with tf.Session(graph=graph) as sess: # Create a session for running `graph`. 
    z_output = sess.run([z]) # Run the node `z` and all nodes it depends on. 

如果你想TensorFlow運行一些一段代碼,您必須將其添加到圖形爲此,TensorFlow提供了複製機制共同語言功能,如tf.Print(),tf.while_loop()