如何理解Tensorflow的計算和數據模型抽象

        Tensorflow採用的是一種編譯執行的模式。即計算過程定義與計算執行分離的模式。用戶通過框架提供的 API 構建算法描述(一般使用 python 進行開發)。框架將用戶的算法定義編譯成由計算邏輯節點( OP ),數據輸入輸出關聯關係 Edge )和計算參數( Variable )組成的可序列化對象 Graph )。

        在正式執行時,框架將 Graph 序列化成 protobuf字節流傳遞給 Tensorflow 的執行引擎( C++ 實現)。執行引擎將上層傳遞的 字節流 反序列化爲 C++ 層面的 Graph 對象後通過優化(節點合併,節點剪枝等手段)。再由 Session 驅動整個 Graph 運行。在執行的過程中還涉及到數據輸入,模型保存與恢復,運行狀態打印與保存等輔助執行功能。

        其中數據輸入的方式一般有兩種feed 和dataset 的方式。 feed 方式是一種低效的人工投喂方式。如果我們把一個 Tensorflow構建的算法Graph 比喻成一條數據生產流水線,這條流水線分爲數據準備和數據處理兩個環節,使用 feed 方式就是每個生產週期,人工從數據準備的節點投遞一批數據(一個 batch )進行生產。生產完畢再投遞下一批。而 dataset 的方式採用的是在數據準備節點處安裝一臺獨立運轉的 發動機,不斷向後生產數據(數據放入隊列),數據處理節點變成另一臺獨立運
轉的發動機負責處理數據。從而形成流水線效應(構成流式計算)抵消數據準備階段的時間開銷,提高處理性能。

       模型保存與恢復等與計算主邏輯無關的輔助功能都是通過 Tensorflow 提供的 Hook 機制實現的。Hook 機制是用來幫助用戶實現一些與算法邏輯無關,需要定期運行的輔助功能, 此機制類似於 Spring中面向切面的概念,此處不再詳細說明 。Tensorflow中內置了很多Hook的實現。常用的有跟Checkpoint,Summary,Logging,TrainStep相關的Hook,用戶也可以 通過繼承SessinRunHook類自行實現一些實用Hook 。

     總結Tensorflow 的主要組成如下:

  1. OP,最小不可分割的計算單元,實現一種獨立的功能,是用戶構建算法的積木塊。
  2. Variable,訓練參數,是OP的組成部分或者用戶自行定義的訓練參數 。
  3. Edge,表示OP之間數據依賴關係的描述。
  4. Tensor ,在 OP 之間流動的數據。
  5. Graph ,完整的算法邏輯 描述。
  6. Session ,算法執行驅動單元。
  7. Dataset ,數據輸入管道。
  8. Hook ,輔助定時功能單元。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章