2016-09-30 58 views
0

我是Tensorflow的新手。Tensorflow變量和Ops與Python等價物

  • 是否有必要使用tensorflow的功能,如使用tf.constant()更換int32float32要不?
  • 另外在計算時,用tf.mul()代替正常的Python乘法*
  • 另外打印功能tf.Print()而不是print()

回答

1

如上所述here

張量是一個符號手柄的操作的所述輸出中的一個。它不包含那個操作輸出的值,而是提供了在TensorFlow Session中計算這些值的方法

所以張量變量不像python變量。而是他們指定computational graph中的操作之間的關係。用於描述圖形的python變量是爲了程序員的方便,但可能更容易將python變量和張量變量視爲並行命名空間。這個例子可能會有幫助:

with tf.Session() as sess: 
    a = tf.constant([1, 2, 3]) 
    b = tf.Variable([]) 
    b = 2 * a 
    sess.run(tf.initialize_all_variables()) 
    print(b) # Tensor("mul:0", shape=(3,), dtype=int32) 
    print(b.eval()) # [2, 4, 6] 
    b = tf.Print(b, [b]) # [2, 4, 6] (at the command line) 

從這裏就可以看出:

  • print(b)有關操作返回的信息「B」是指以及可變形狀和數據類型,而不是價值。
  • b.eval()(或sess.run(b))返回作爲numpy的陣列,其可以通過一個python print()
  • tf.Print()允許你看到圖形執行期間的b值被印刷的b值。

請注意,對於新手來說,tf.Print()的語法可能有點奇怪。如文檔here中所述,tf.Print()是一種身份操作,它只具有打印到命令行的副作用。第一個參數剛剛通過。第二個參數是打印的張量列表,可能與第一個參數不同。還要注意,爲了使tf.Print()做些什麼,在隨後調用sess.run()時使用的變量需要依賴於tf.Print()的張量輸出,否則該圖的這部分將不會執行。

最後相對於數學OPS如tf.mul() VS *許多正常蟒OPS的重載用等價tensorflow OPS,如所描述here

+0

感謝您的回覆。我認爲以Tensorflow的方式進行計算會更好:在會話中構建圖並計算它。另外,我猜測在張量的計算上可能會有一些優化,比如在某些情況下,使用'tf.mul'可能會比普通的python乘法更好。 –

+0

我正在考慮的另一件事是,如果我需要使用[** TensorBoard **](https://www.tensorflow.org/versions/r0.11/how_tos/summaries_and_tensorboard/index.html)來顯示圖形,而它支持non-tensorflow操作,如numpy的操作或正常的python操作?我正在研究一個小型網絡,我會在稍後嘗試。你能告訴我有沒有什麼好習慣用Tensorflow編碼?就像設置默認'tf.Session'使用'operation.eval()',而不是'用tf.Session as sess:'。既然有許多方法可以建立一個圖並運行圖,那麼你是否有一些肯定的選擇? –

+1

我認爲每個人都需要開發自己的編碼風格。我建議你看一下github上的各種tensorflow例程,如果你喜歡一個人的風格,就試着去關注它。無論如何,如果你有特定的問題或問題,只要將它們發佈到這個論壇。這裏的TF社區似乎非常敏感。 – RobR