TensorFlow入門簡介,新手請看這裡!

劉美利發表於2018-08-02

TensorFlow是一個使用資料流圖進行數值計算的開源軟體庫,是谷歌基於DistBelief研發的第二代人工智慧學習系統,命名來源於本身的執行原理。Tensor(張量)意味著N維陣列,Flow(流)意味著基於資料流圖的計算,TensorFlow為張量從流圖的一端流動到另一端的計算過程。TensorFlow將複雜的資料結構傳輸至人工智慧神經網路進行分析和處理。

2017年2月,TensorFlow 1.0版正式釋出,其當年的提交數目就已超過2.1萬,其中還有部分外部貢獻者。

TensorFlow是跨平臺的,它幾乎可以執行在所有平臺上,比如GPU、CPU、移動和嵌入式平臺,甚至是張量處理單元[Tensor Processing Units (TPUs)]。谷歌推出過一款AlphaGo人工智慧圍棋程式,其工作原理就是基於“深度學習”,並且是第一個擊敗人類職業選手的人工智慧程式。

TensorFlow支援演算法

TensorFlow表達了高層次的機器學習計算,大大簡化了第一代系統(DistBelief),並且具備更好的靈活性和可延展性。TensorFlow一大亮點是支援異構裝置分散式計算,它能夠在各個平臺上自動執行模型,從手機、單個CPU / GPU直到成百上千GPU卡組成的分散式系統。

資料流圖

資料流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算。“節點” 一般用來表示施加的數學操作,但也可以表示資料輸入(feed in)的起點/輸出(push out)的終點,或者是讀取/寫入永久變數(persistent variable)的終點。“線”表示“節點”之間的輸入/輸出關係。這些資料“線”可以傳送“大小可動態調整”的多維資料陣列,即“張量”(tensor)。一旦輸入端的所有張量準備好,節點將被分配到各種計算裝置完成非同步並行運算。

TensorFlow的特徵與優勢

圖片來自Google.com

機器學習越來越複雜,深度學習模型不斷壯大。很多模型圖需要進行分散式訓練才能在合理的時間範圍內迭代,並且研發者通常希望將開發的模型部署到多個平臺。

上圖是TensorFlow的一個完整的資料計算結構,它有很多好處:

  • 可移植,因為圖形可立刻執行或者儲存供以後使用,它可以執行在多個平臺,比如:CPU、GPU、TPU、移動平臺、嵌入式平臺等。此外,它可以部署到生產環境中,不需要依賴任何構建圖形的程式碼,只需要執行它即可。

  • 可轉化、可最佳化,因為圖形可以被轉換為給定平臺的更優版本,這很適用於大型機器的快速移動推理。

  • 支援分散式執行

跟計算圖相結合的TensorFlow高階API可在同一框架中實現豐富靈活的開發環境和強大的生產功能。

TensorFlow Eager Execution(貪婪執行)

之前的TensorFlow有一個痛點就是隻支援靜態圖模型。也就是說,之前的TensorFlow在處理資料前必須預先定義好一個完整的模型,如果資料非常完整還好,但是實際的專案中難免有一些特殊情況,很多專案需要大量實驗才能選擇正確的模型,這實現起來就很麻煩了。

2017年10月31日,Google釋出了TensorFlow Eager Execution(貪婪執行),為TensorFlow新增了指令式程式設計介面。當你啟動Eager時,TensorFlow操作會立刻執行,不用透過Session.run()執行一個預先定義的圖。

 Eager Execution有以下四大優點:

  • 可以輕鬆檢查、除錯圖形的中間值

  • 可以在TensorFlow API—loop, conditional, function, closure等中使用Python控制流

  • 能夠使除錯更簡單

  • Eager的 "define-by-run"語句將使構建和訓練動態圖變得更容易

只要您確認了TensorFlow程式碼,就可以自動將其轉換為圖形,這樣更容易儲存、移植和分發圖形。

TensorFlow開源社群

TensorFlow在很大程度上是開源的,允許社群貢獻者免費使用。TensorFlow團隊已經設定了流程來管理提取請求、審查和路由問題。

目前為止,從小文件修復一直到OS X GPU支援或OpenCL實現等,社群內已經有超過890個外部貢獻者新增程式碼。

Tensorflow在GitHub上已經超過76,000顆星,而且每個月都在持續增長。

其中有很多是社群建立的教程、模型、翻譯和專案,如果您對機器學習感興趣,它是一個很好的學習源。比如,目前由TensorFlow團隊監控的Stack Overflow就是一個很好的學習社群。

TensorFlow的內部版本和外部版本除了一些細微差別,比如谷歌內部架構介面,一些尚未準備好的路徑等,其他沒有什麼大的區別。兩版TensorFlow核心是相同的,內部的拉取請求會在一天半左右的時間出現在外部,反之亦然。

 TensorFlow在GitHub組織中不僅有TensorFlow,還有其他框架和元件,比如TensorBoard,Project Magenta等。此外,您還可以找到多語言(Python, C++, Java, and Go)的TensorFlow API,並且社群還開發了其他語言介面,例如C#,Haskell,Julia,Ruby,Rust和Scala等。

TensorFlow開源模型

TensorFlow團隊開源了大量模型,您可以在tensorflow/models repo中找到它們,其中釋出的程式碼不僅包括模型圖,還包括訓練模型,而且這些模型都是可以開箱即用的。此外您還可以透過“transfer learning(遷移學習)”的過程對一些模型進行最佳化。

已經被髮布的TensorFlow開源模型如下:物件檢測API、tf-seq2seq(用於 Tensorflow 的通用編碼器-解碼器框架)、ParseySaurus(一組預訓練模型,SyntaxNet 的升級版)、Multistyle Pastiche Generator(多樣式模擬器)等。

Transfer learning(遷移學習)

許多TensorFlow模型都包含可訓練、可最佳化示例,方便研發人員進行Transfer learning(遷移學習)

用一句話概括就是“為了偷懶, 在訓練好的模型上繼續訓練其他內容, 充分使用原模型的理解力”。有時候也是為了避免再次花費特別長的時間重複訓練大型模型。比如,同一型別的專案, 不用自己完全從頭做, 借鑑對方的經驗, 往往能節省很多時間。順著這樣的思路,有想法的研發人員可以不用花時間重新訓練一個無比龐大的神經網路,只要借鑑一個已經訓練好的神經網路即可。

TensorFlow在移動裝置上的應用

 移動端是TensorFlow的一個很好的應用,當網路連線不好或者向伺服器傳送連續資料成本太高時,移動端的作用就顯現出來。但是當你訓練好模型並且想要使用它時,你可能不希望模型在裝置上佔用太大空間。

TensorFlow的專案MobileNet不斷在開發計算機視覺模型,用於解決移動裝置或嵌入式應用中的速度和準確度問題。

Android演示之一TF Detect就使用了經過Tensorflow Object Detection API培訓過的MobileNet模型。

圖片來自Google.com

TensorFlow生態系統

TensorFlow生態系統包含許多工具和庫,可以幫助研發者更有效的工作。這裡舉幾個例子:

TensorBoard

TensorBoard是一個Web應用程式,它可以把複雜的神經網路訓練過程視覺化、可以很好的理解、除錯並最佳化程式。研發者可以使用TensorBoard檢視TensorFlow模型圖。

Datalab

Jupyter Notebook 是一款開放原始碼的 Web 應用程式,可讓我們建立並共享程式碼和文件。

它提供了一個環境,你可以在其中記錄程式碼,執行程式碼,檢視結果,視覺化資料然後在檢視輸出結果。這些特性使其成為一款執行端到資料工作流程端的便捷工具,可以用於資料清理,統計建模,構建和訓練機器學習模型,視覺化資料等。

Facets

Facets是一款開源視覺化工具,可以幫助使用者理解並分析各類機器學習資料集。例如,您可以檢視訓練和測試資料集,比較每個要素的特徵,並按照具體特徵對要素進行排序。

當然,除了這些例子還有很多其他工具和庫,本文就不一一介紹了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542119/viewspace-2169011/,如需轉載,請註明出處,否則將追究法律責任。

相關文章