tensorflow程式設計一些需要知道的
1. Tensorflow 中有4種類型:tensor(張量), op(操作),Variables(變數), graph(圖). tensorflow是以圖來表示計算的系統。op是graph中的節點,tensor作為op的輸入輸出。Variables(變數)維持了圖執行過程中的狀態資訊
2. 在程式設計時,一般分為兩個階段:1)圖構建;2)執行圖。 後者是在session(會話)中載入graph,通過op來驅動計算。
3. 在執行時,TensorFlow 上通過一個“翻譯”過程,將定義的圖轉化為不同的可用計算資源間實現分佈計算的操作,如cpu,GPU。
4. 一個 tensor包含一個靜態型別 rank, 和一個 shape.
5. Value op 有 constant, sequence, random等型別。
6. Variables代表一個可修改的tensor,可作為op的輸入。通常將一些訓練時的統計值、模型引數等用Variables來表達。
7. Tensorflow是基於圖的計算,為了debug,你無法在你的程式碼中直接print變數,因為這些程式碼往往都是在構建圖,而不是執行。為了取回操作的輸出內容, 可以在使用 Session 物件的 run() 呼叫執行圖時, 傳入一些 tensor, 這些 tensor 會幫助你取回結果,可以取回多個 tensor。
8. Tensorflow 還提 供給 (feed) 機制, 該機制可臨時替代圖中的任意操作中的 tensor, 並只在呼叫的時候有效。它是使用tf.placeholder()為這些操作建立佔位符。比如在訓練CNN時使用feed來實現讀圖片,即先tf.placeholder一個位置,然後在迴圈讀圖片時,run(feed_dict={the_output_image, tf.placeholder(dtype=tf.string): image_data})
9. Tensorflow把圖的構建放在python等各種容易開發的語言裡做,而把全部圖的高密集計算放在python外做。
10. 通過SummaryWriter可以對graph進行序列化,並在tensorboard視覺化,從而對你的graph有個全域性到細節的掌控。
11. 通過tf.Summary進行變數儲存和統計,通過SummaryWriter和tensorboard進行視覺化。
寫一個簡單的sample code作為上述例子
import tensorflow as tf import random print "test basic" a1 = tf.constant([[3., 3.]]) a2 = tf.constant([[2.,],[1.,]]) p = tf.matmul(a1, a2) state = tf.Variable(13, name="counter") init_op = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init_op) result1 = sess.run(a1) result2 = sess.run(a2) result3 = sess.run(p) for _ in range(10): result4 = sess.run(state.assign_add(1)) print result1, result2, result3, result4 #test fetch print ("test fetch") with tf.Session() as sess: result = sess.run([a1, p]) print result #test placeholder print ("test placeholder") plh = tf.placeholder(dtype=tf.int32) plhr = tf.add (plh, 2) with tf.Session() as sess: print sess.run (plhr, feed_dict={plh:1}) #test save and restore saver = tf.train.Saver() init_op = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init_op) save_path = saver.save(sess, "/tmp/model.ckpt") state2 = tf.Variable(0, name="counter") restorer = tf.train.Saver() with tf.Session() as sess: restorer.restore(sess, "/tmp/model.ckpt") print sess.run(state2) #test visualize summ = tf.Summary() summ.value.add(tag='testsum', simple_value=111) with tf.Session() as sess: sess.run(init_op) writer = tf.train.SummaryWriter("/tmp/modelvis", sess.graph) for global_step in range(50): cnt = sess.run (state.assign_add(random.randint(1,100))) tmp_summ = tf.Summary() tmp_summ.value.add(tag="sess_res", simple_value = cnt.item()) writer.add_summary (tmp_summ, global_step)