1. 程式人生 > >tensorflow程式設計一些需要知道的

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)