TensorFlow核心概念和原理介紹



###關於 TensorFlow

TensorFlow 是一個采用數據流圖(data flow graphs),用於數值計算的開源軟件庫。

節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平台上展開計算,例如台式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。

TensorFlow 最初由Google大腦小組(隸屬於Google機器智能研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。


###核心概念:數據流圖

數據流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算。

“節點” 一般用來表示施加的數學操作,但也可以表示數據輸入(feed in)的起點/輸出(push out)的終點,或者是讀取/寫入持久變量(persistent variable)的終點。

“線”表示“節點”之間的輸入/輸出關系。這些數據“線”可以輸運“size可動態調整”的多維數據數組,即“張量”(tensor)。

張量從圖中流過的直觀圖像是這個工具取名為“Tensorflow”的原因。一旦輸入端的所有張量准備好,節點將被分配到各種計算設備完成異步並行地執行運算。

更詳細的介紹可以查看tensorflow中文社區:http://www.tensorfly.cn/

TensorFlow主要是由計算圖、張量以及模型會話三個部分組成。


###計算圖

在編寫程序時,我們都是一步一步計算的,每計算完一步就可以得到一個執行結果。

在TensorFlow中,首先需要構建一個計算圖,然后按照計算圖啟動一個會話,在會話中完成變量賦值,計算,得到最終結果等操作。

因此,可以說TensorFlow是一個按照計算圖設計的邏輯進行計算的編程系統。

TensorFlow的計算圖可以分為兩個部分:

  • 構造部分,包含計算流圖;
  • 執行部分,通過session執行圖中的計算。

構造部分又分為兩部分:

  • 創建源節點;
  • 源節點輸出傳遞給其他節點做運算。

TensorFlow默認圖:TensorFlow python庫中有一個默認圖(default graph)。節點構造器(op構造器)可以增加節點。


####張量

在TensorFlow中,張量是對運算結果的引用,運算結果多以數組的形式存儲,與numpy中數組不同的是張量還包含三個重要屬性名字、維度、類型。

張量的名字,是張量的唯一標識符,通過名字可以發現張量是如何計算出來的。比如“add:0”代表的是計算節點"add"的第一個輸出結果。維度和類型與數組類似。


####模型會話

用來執行構造好的計算圖,同時會話擁有和管理程序運行時的所有資源。

當計算完成之后,需要通過關閉會話來幫助系統回收資源。

在TensorFlow中使用會話有兩種方式。第一種需要明確調用會話生成函數和關閉會話函數

import tensorflow as tf 

# 創建session  
session = tf.Session()  
#獲取運算結果  
session.run()  
#關閉會話,釋放資源  
session.close()  

第二種可以使用with的方式

with tf.Session() as session:  
    session.run()  

兩種方式不同的是,第二種限制了session的作用域,即session這個參數只適用於with語句下面,同時語句結束后自動釋放資源,
而第一種方式session則作用於整個程序文件,需要用close來釋放資源。


###tensorflow分布式原理

tensorflow的實現分為了單機實現和分布式實現。

單機的模式下,計算圖會按照程序間的依賴關系順序執行。

在分布式實現中,需要實現的是對client,master,worker process,device管理。

  • client也就是客戶端,他通過session的接口與master和worker相連。

  • master則負責管理所有woker的計算圖執行。

  • worker由一個或多個計算設備device組成,如cpu,gpu等。

具體過程如下圖:

在分布式實現中,tensorflow有一套專門的節點分配策略。

策略是基於代價模型,代價模型會估算每個節點的輸入,輸出的tensor大小以及所需的計算時間,然后分配每個節點的計算設備。


###擴展功能

在tensorflow中比較重要的拓展功能有,自動求導,子圖執行,計算圖控制流以及隊列/容器

求導是機器學習中計算損失函數常用的運算,TensorFlow原生支持自動求導運算,它是通過計算圖中的拓展節點實現。

子圖執行是通過控制張量的流向實現。

計算圖控制流:是指控制計算圖的節點極其運行的設備管理,它提供了快速執行計算和滿足設備施加的各種約束。比如限制內存總量為了執行它的圖子集而在設備上所需的節點。

隊列是一個有用的功能,它們允許圖的不同部分異步執行,對數據進行入隊和出隊操作。

容器是用來存放變量,默認的容器是持久的,直到進程終止才會清空,同時容器中的變量也可以共享給其他計算圖使用。

詳細的細節可查看TensorFlow的介紹pdf

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45166.pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM