我是Tensorflow的新手。Tensorflow變量和Ops與Python等價物
- 是否有必要使用tensorflow的功能,如使用
tf.constant()
更換int32
,float32
要不? - 另外在計算時,用
tf.mul()
代替正常的Python乘法*
? - 另外打印功能
tf.Print()
而不是print()
?
我是Tensorflow的新手。Tensorflow變量和Ops與Python等價物
tf.constant()
更換int32
,float32
要不?tf.mul()
代替正常的Python乘法*
?tf.Print()
而不是print()
?如上所述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。
因爲張量流建立在計算圖上。當你用python構建圖表時,你只是建立了一個計算描述(實際上並不是計算)。要計算任何內容,必須在會話中啓動圖形。所以最好用tensorflow操作進行計算。
https://www.tensorflow.org/versions/r0.11/get_started/basic_usage.html
感謝您的回覆。我認爲以Tensorflow的方式進行計算會更好:在會話中構建圖並計算它。另外,我猜測在張量的計算上可能會有一些優化,比如在某些情況下,使用'tf.mul'可能會比普通的python乘法更好。 –
我正在考慮的另一件事是,如果我需要使用[** 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:'。既然有許多方法可以建立一個圖並運行圖,那麼你是否有一些肯定的選擇? –
我認爲每個人都需要開發自己的編碼風格。我建議你看一下github上的各種tensorflow例程,如果你喜歡一個人的風格,就試着去關注它。無論如何,如果你有特定的問題或問題,只要將它們發佈到這個論壇。這裏的TF社區似乎非常敏感。 – RobR