學習筆記TF003:數據流圖定義、執行、可視化

數據流圖,有向圖,定義計算結構。一組函數鏈接在一起。每個函數輸出傳遞給級聯鏈上其他函數。利用小數學函數構造數據複雜變換。

節點node,對數據所優質運算操作。邊edge,向節點輸入、輸出的數據。指向節點的邊為輸入,從節點引出的邊為輸出。邊是節點之間的連接,做信息傳輸。輸入可能來自其他數據流圖、文件讀取、用戶輸入。

輸入節點把單個輸入傳遞給大量後繼節點。不依賴其他節點信息的節點,互相獨立。數據流圖輸入抽象,操控內部運算細節,客戶只需了解輸入信息種類。把整個節點序列視為一組輸入輸出的離散構件。級聯運算組可視化更容易,無需關心部件內部具體細節。

造成循環依賴(circular dependency)的節點連接不被允許。節點輸出是後繼節點計算必須輸入,節點是後繼節點的依賴節點。輸出不需要其他節點任何輸入,互相獨立。依賴關係具有傳遞性。依賴分為直接依賴和間接依賴。節點輸出作為直接或間接依賴節點的輸入,因都需要等待對方計算完成,形成循環依賴。設置節點初始值可以讓數據流圖工作起來,但也會陷入無限循環,程序無法終目,依賴節點無窮大無法追蹤依賴信息,數據會導致溢出或使某些計算無意義。通過數據流圖有限次複製,並排放置,原始輸入傳給所有副本,副本輸出與輸入串接,稱為展開(unrolling)。

確保只對必要節點執行運算,維護節點的直接依賴節點列表。空棧開始,最終輸出節點入棧,輸出節點直接依賴節點全部入棧,繼續追溯,直到所有依賴節點全部入棧,對棧中節點排序,保證上運行次序,追蹤已經完成計算的節點,輸出保存在內存,避免重複計算。

TensorFlow工作流,定義數據流圖,運行數據流圖。節點被稱為Operation(Op)。各Op接收零個或多個輸入Tensor對象,輸出零個或多個Tensor對象。調用Python構造方法創建Op。

確保TensorFlow環境處於活動狀態。只有一個終端擁有活動狀態的TensorFlow環境。jupyter notebook啟動jupyter。新建項目,敲入以下代碼:

import tensorflow as tf #導入TensorFlow庫,取別名tf

a = tf.constant(5, name="input_a")#定義節點a,創建常量Op,接收單個張量值5,輸出給連接節點,以 input_a標識。

b = tf.constant(3, name="input_b")#定義節點b,創建常量Op,接收單個張量值3,輸出給連接節點,以input_b標識。

c = tf.multiply(a,b, name="mul_c")#定義節點c,創建乘法Op,接收兩個輸入,輸出乘積,以mul_c標識。

d = tf.add(a,b, name="add_d")#定義節點d,創建加法Op,接收兩個輸入,輸出求和,以add_d標識。

e = tf.add(c,d, name="add_e")#定義節點e,創建加法Op,接收兩個輸入,輸出求和,以add_e標識。

sess = tf.Session()#創建並啟動TensorFlow Session對象。

output = sess.run(e)#Session對象執行節點e,並保存輸出結果

writer = tf.summary.FileWriter(./my_graph, sess.graph)#創建並啟動summary.FileWriter對象,接收兩個參數,一是數據流圖磁碟存放路徑;二是Session對象graph屬性。

writer.close()#關閉summary.FileWriter對象

sess.close()#關閉Session對象

.constant創建常量Op,接收單個張量值,輸出給連接節點,自動將標量值轉換為Tensor對象,name參數標識節點。.multiply創建乘法Op,接收兩個輸入,輸出乘積。.add創建加法Op,接收兩個輸入,輸出求和。.sub創建減法Op。.div創建除法Op。.mod創建取模Op。無需定義邊,TensofFlow自動繪製連接。TensorFlow Session負責運行時數據流圖監督,運行數據流圖。.Session()創建並啟動TensorFlow Session對象。.run方法執行目標節點,運行必要運算,輸出結果。.summary.FileWriter()創建並啟動summary.FileWriter對象,接收兩個參數,一是字元串輸出目錄,數據流圖磁碟存放路徑;二是Session對象graph屬性,引用追蹤數據流圖。summary.FileWriter對象初始化後立即寫入數據。

退出jupyter,tensorboard --logdir="my_graph"啟動TensorBoard服務。在瀏覽器輸入0.0.0.0:6006訪問TensorBoard伺服器。點擊Graph標籤,即可看到可視化的數據流圖。

參考資料:

《面向機器智能的TensorFlow實踐》

歡迎加我微信交流:qingxingfengzi

我的微信公眾號:qingxingfengzigz

我老婆張幸清的微信公眾號:qingqingfeifangz


推薦閱讀:

最終章 | TensorFlow戰Kaggle「手寫識別達成99%準確率
SSD-Tensorflow:3 步運行 TensorFlow 單圖片多盒目標檢測器
學習筆記TF054:TFLearn、Keras

TAG:TensorFlow | 数据分析 | 大数据 |