去年我翻譯了一篇文章:寫給初學者的Tensorflow介紹,但這只是文章的第一部分,由於原作者遲遲沒有寫第二部分,我後來就把這件事情忘了。前幾天,有朋友留言問為什麼沒有第二部分的內容,還有朋友熱心的給出了第二部分的原文連結。所以在此把第二部分的內容也翻譯出來,原文地址:medium.com/buzy-develo… 。點選閱讀原文可以跳轉到該文章,需要翻牆哦!
在上一部分中,我寫了一些非常重要的關於使用Tensorflow構建機器學習模型的核心理論概念。
Tensorflow的核心元件是張量和計算圖(或資料流圖)。Tensorflow只是一個將運算表示為計算圖的框架。然後Tensorflow將圖劃分為許多彼此獨立的子圖,這些子圖並行執行,當然這是TensorFlow的主要特性之一,它為其可擴充套件性做出了很大貢獻。Tensorflow還具有另一個重要特性,它提供了各種現成的計算工具,可用於解決各種問題。這些計算工具也是計算圖,一旦將它們新增到程式中,它們就被視為子圖,因為它們將成為您要構建的計算圖的一部分。
使用Tensorflow執行程式時會發生什麼?
上圖展現了TensorFlow最簡單的架構。頂層代表程式語言介面,Tensorflow主要支援C++和Python(當然還有許多語言繫結可用,但不如C++和python高效)。
語言繫結:語言繫結提供了使用您熟悉的語言構建圖形的介面,請注意,這只是一個幫助您構建圖形的層。
複合圖:瞭解複合圖的含義非常重要,複合圖是多個子圖的組合,在第一層構建的圖總是複合圖,因為它是許多現成的子圖或Tensorflow提供的操作的組合。例如,如果要為如下表示式構建計算圖:
e = a * b + c +(a / b)
複製程式碼
那麼e是複合圖,因為它是2個子圖a * b和(a / b)的組合(在Tensorflow術語中,表示式就是計算圖)。
核心Tensorflow執行系統:
一旦構建並編譯Tensorflow程式,語言繫結將呼叫包含核心執行系統的Tensorflow庫。通過繫結傳送到核心執行系統的資料採用容器的形式。此容器在Tensorflow中也稱為Session。因此,您必須建立一個會話物件,其中包含所有操作和張量。核心執行引擎的任務很簡單:
- 獲取會話物件併為其構建計算圖。
- 辨別子圖及其輸入。
- 確定子圖是預先構建的Tensorflow操作還是使用者操作。
- 生成主程式和工作程式,初始化分散式環境。
- 封裝子圖並將它們傳送到單個工作程式。主程式監控所有工作程式。
- 與Tensorflow核心互動以執行數學運算。
Tensorflow操作:Tensorflow操作是一組預置的數學運算,使用C和C++構建。它們本質上是子圖,可以在我們的程式中使用。Tensorflow操作支援的操作非常廣泛,有許多不同複雜程度的操作,包括簡單的加法、乘法等,以及神經網路啟用函式、梯度下降、損失操作等。這個龐大的集合使得Tensorflow不僅是一個分散式執行引擎,而且還是一個用於構建科學應用的數學引擎。(Tensorflow也使用了Numpy)。
核心:Tensorflow的核心定義如下:“Tensorflow是一個用於異構平臺上的機器學習和數學計算的庫。”這裡的異構平臺意味著各種各樣的裝置具有不同的配置和不同的功能,具有不同的記憶體限制。Tensorflow可以執行在任何平臺,因為它有一個複雜的核心。這些核心是為每個平臺構建的,可供上層用來與異構硬體裝置進行互動。核心可以利用XLA、AVX等CPU的某些特性來加速數學運算。