淺入淺出TensorFlow 9 - 代碼框架解析
一. TensorFlow 源碼
截止到目前為止,TensorFlow 在 【Github】 的 Contributors 已經接近900人,Fork 30000次。
學習這麼龐大的開源項目,首先必須要搞清楚其代碼組織形式,我們先來看目錄結構:
Project 目錄分為4個:
1)tensorflow
核心代碼目錄,圖中可以看到其子目錄結構,後面我們會展開講解。2)third_party 第三方庫,包括:eigen3,fft2d,hadoop,mkl,probuf 等。3)tools 只有兩個文件 bazel.rc 和 tf_env_collect.sh。4)util/python 存放用到的 python 工具。另外一個比較重要的文件是 configure,用於配置 tensorflow 的安裝環境。
對於 tensorflow 核心目錄,裡面比較關鍵的幾個模塊:
1.1)core
這是 tensorflow 的核心代碼模塊.
1.2)tensorboard 不用解釋,應該都清楚,這是可視化工具 tensorboard 的代碼目錄。1.3)stream_executor tensorflow 流圖的並行計算執行,核心代碼。1.4)go,java,python 主要的第三方 API。1.5)contrib 存放有其他項目貢獻者添加的相關貢獻代碼,非核心官方代碼,有具體方向的應用可以參考這裡面的模塊。
二. 核心代碼目錄 Core
Core 目錄是代碼最核心的部分,包含 框架、圖、會話、runtime 最核心的部分,主要模塊包括:
● common_runtime:公共運行庫,包含 會話(session)、線程(thread),內存管理(memory), 設備調度(device)等基本運行庫。
● distributed_runtime:分散式運行庫,與上面類似,作為分散式情況下的運行庫,提供運行支撐。● framework:框架基礎模塊定義,主要是通用組件的結構格式定義;● graph:計算流圖相關基礎操作(類結構),包括 拆分、合併、執行 等操作,被外面的 executor 調用;● kernels:核心操作定義,像常用的運算 matmul,sigmoid 等操作;● lib:基礎庫用於內部調用,包括 hash、io、jpeg、math 等;● ops:對 kernel 下的op進行註冊和對外聲明;● protobuf:Google 的傳輸交換模塊,用於傳輸時的數據序列化;
三. Graph 與 Session
關於 Graph 和 Session 前面已經有篇幅講過,概念上可能大家並沒有完全理解,本篇再講一下。
● Graph
首先搞清一個概念,Graph 是 Tensorflow 必須要存在的,是靈魂核心,你所看到的任何一個 圖都是通過 Graph來組織的。
再來看一段你已經很熟悉的代碼:
>>> import tensorflow as tf >>> str = tf.constant("Hello World!") >>> se = tf.Session() >>> print se.run(str)
沒看到 Graph 的創建對不對? 實際上在你創建 Session 的時候,系統自動為你創建了一個 默認Graph,用於接下來所有 OP 的組織和存放。
某些情況下,你可以同時維護兩個以上的 Graph,比如我們經常會遇到這樣一句, tf.Graph.as_default()
curr_graph = tf.Graph() with curr_graph.as_default(): c_val = tf.constant(1.0) assert c_val.graph is curr_graph
在定義 OP 操作的時候可以選擇Graph 作為 default,那麼你所創建的 OP 就建立在對應 Graph 下面了。
● Session
TensorFlow 的 Session 用法你可能比較熟了,來回顧一下:
# method 1 sess = tf.Session() print sess.run(…) sess.close() # method 2 with tf.Session() as sess: print sess.run(…) # method 3 - 僅用於互動式環境 sess = tf.InteractiveSession() a = tf.constant(1.0) b = tf.constant(2.0) c = a + b # 我們直接使用c.eval() 而不是sess.run print(c.eval()) sess.close()
對於 Graph 和 Session 的關係,需要記住,Graph 可以在對應多個 Session 中執行。
推薦閱讀:
※TensorFlow on a GTX 1080
※在Docker中部署使用Tensorflow && Docker基本用法介紹
※知識布局-tensorflow-bp神經網路
※TensorFlow應用實戰 | TensorFlow基礎知識
※TensorFlow入門(1):求N元一次方程
TAG:TensorFlow |