1. 程式人生 > >TensorFlow 2.0釋出在即,高階API變化搶先看

TensorFlow 2.0釋出在即,高階API變化搶先看

640?wx_fmt=jpeg


作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison

整理 | 非主流、Jane

出品 | AI科技大本營


【導語】早在今年 8 月的時候,谷歌開源戰略師 Edd Wilder-James 在一封公開郵件中表示正在研發 TensorFlow 2.0,並將於今年晚些時候釋出預覽版。在 2018 年最後半個月的日子裡,我們就要迎來了新版本的釋出。


在之前的公開郵件中,Edd Wilder-James 曾提到過一些 TensorFlow 2.0 的設計思想和重大改變:易用性將成為重點、Eager Execution 將會是核心功能、支援更多的平臺和語言等。


而且未來所有的 tf.contrib 都會被棄用,對於每個 contrib 模組,要麼 a)將專案整合到 TensorFlow 中;b)將其移至單獨的儲存庫;c)完全將其移除。


在這篇文章中,我們將預覽 TensorFlow 中高階 API 的未來方向,並回答大家常問的一些問題。


Keras 是廣受開發者社群歡迎的高階 API,主要用於構建和訓練深度學習模型。它可以用於快速原型設計、最先進的研究以及實際生產。雖然 TensorFlow 已經支援 Keras,但是 2.0 版本將實現更加緊密的整合。


Keras有以下幾大關鍵優點:使用者友好、模組化、可組合、容易擴充套件,既適合新手,也適合專家。這些優點加起來。可以讓學習、研究、開發、部署的工作流更加容易,效率更高。通過將 Keras 構建為 TensorFlow 的高階 API,機器學習領域的新手可以更容易上手。通過單一的高階 API 可以減少混淆,讓我們能夠專注於為研究人員提供高階功能。


TensorFlow 2.0 版本釋出在即。我們會先解答下大家比較關注的幾個問題,然後我們會介紹 TensorFlow 2.0 中關於Keras 的一些新功能和重大變化,如Sequential API、Functional API、Model Subclassing API 與 Estimators 等。


FAQ


1、問:Keras 是否是一個獨立的庫?


答:其實,更應該把 Keras 視為一個 API。Keras 一直作為一個開源專案進行維護,大家可以在 (www.keras.io.)中找到。這個專案一直獨立於 TensorFlow,並且擁有一個活躍的貢獻者社群和使用者社群。在 tf.keras 模組裡,TensorFlow 有一個特定增強功能的完整 Keras API 實現。


2、問:Keras 只是 TensorFlow 或其他庫的一個包裝器嗎?


答:不,這是一個常見的(但可以理解的)錯誤觀念。 Keras 用於定義和訓練機器學習模型的 API 標準,它與特定實現無關:除了 TensorFlow,Keras API 還可以用於 MXNet,TypeScript,JavaScript,CNTK,Theano,PlaidML,Scala,CoreML 和其他庫的實現。


3、問:TensorFlow 內建的 Keras 版本與 keras.io 上的版本有什麼區別?


答:TensorFlow 包含 Keras API(在 tf.kerasmodule 中)的實現,具有 TensorFlow 特定的增強功能,包括支援 Eager Execution,方便直觀除錯和快速迭代,支援 TensorFlow SavedModel模型交換格式,以及分散式訓練(包括 TPU)。


當用到 tf.keras 模組的子類 API 時,Eager Execution 特別有用。這類 API 受到 Chainer 的啟發,大家通過命令列就可以編寫模型。tf.keras 與 TensorFlow 的生態系統緊密結合,可以支援:


  • tf.data 用於構建高效能的輸入流。你可以用 Numpy 處理的資料來訓練模型,或者用 tf.data 來衡量規模和效能。

  • 分佈策略。在跨各種計算平臺時進行分散式訓練,包括分佈在很多機器上的 GPU 和 TPU。

  • 輸出模型。通過 tf.keras APIs 建立的模型可以在 TensorFlow SavedModel 格式下進行序列化,並且可以使用 TensorFlow Serving 或通過其他語言(Java、Go、Rust、C#等)進行繫結。

  • 模型可以使用 TensorFlow Lite 部署在移動或嵌入式裝置上,也可以使用 TensorFlow.js。(也可以使用與此相同的 Keras API 直接在 JavaScript 中開發模型。)

  • 特徵列,用於有效地表示和分類結構化資料。


如何安裝 tf.keras?我是否需要先通過 pip 安裝 Keras ?


因為 tf.keras 是包含在 TensorFlow 內的,所以,大家不用單獨安裝 Keras。如果在 Colab 中你可以直接執行下面的程式碼:


640?wx_fmt=jpeg


然後你就可以使用 tf.keras 了。如果你是安裝新手,可以通過近期教程中的一些例子來檢查是否匯入成功。


5、TensorFlow 為專家和新手提供了不同 API,如何使用?


TensorFlow 的開發者們經驗、層次都不同,有剛接觸 ML 的學生們、也有 ML 領域的專家或研究者。而 TensorFlow 的一個優點就是它提供了不同的 APIs 支援不同的工作流和目標。這也是 TensorFlow 的 Keras 整合的一個主要目標,可以讓使用者選擇對自己更有益處的部分,而無需採用 Keras 的整體框架。


Sequential API


如果你正在學習機器學習,我們 建議你從 tf.keras Sequential API 開始,它非常直觀、簡潔,適用於機器學習中 95% 的問題。使用這個 API,10 行程式碼就能搭建一個神經網路。


參考案例:

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/_index.ipynb


640?wx_fmt=png


定義模型的最常用方法是構建神經網路的層圖,最簡單的模型型別是把這些層堆疊起來。 你可以使用 Sequential API 來定義這樣的模型,如下所示:


640?wx_fmt=jpeg


在 “Learn and UseML”章節下面,你可以找到更多使用 the Sequential API 的教程,參考連結:

https://www.tensorflow.org/tutorials/


640?wx_fmt=png


Functional API


當然,順序模型是一個簡單的神經網路層堆疊,不能代表任何模型。不過,你可以使用 Functional API 來構建更高階的模型,定義複雜的拓撲結構,包括多輸入和多輸出模型,具有共享層的模型以及具有殘差連線的模型。


使用 Functional API 構建模型時,神經層是可呼叫的,並可以返回張量作為輸出。然後可以使用這些輸入張量和輸出張量來定義模型。 例如:


640?wx_fmt=jpeg


上面的模型同樣可以使用簡單的程式碼來進行編譯和訓練。


Model Subclassing API


如果你想搭建完全可自定義的模型,那麼可以使用 Model Subclassing API。在類方法(class method)的主體中,你必須以這種方式定義前向傳播。


640?wx_fmt=jpeg


這樣的模型更靈活,但是也更難除錯。所有這三種類型的模型三種類型的模型都可以使用前面顯示的簡單編譯和調整命令來編譯和訓練,或者你可以編寫自己的定製訓練迴圈來實現完全控制。


例如:


640?wx_fmt=jpeg


更多 the Model Subclassing 的案例,可以在“research and experimentation”章節中檢視教程,參考連結:

https://www.tensorflow.org/tutorials/


640?wx_fmt=png

使用 the Model Subclassing API 實現的 Neural Machine Translation with Attention 


640?wx_fmt=jpeg

使用 the Model Subclassing API實現的 GAN 


如果這些模型都無法滿足你的研究?


  • 如果你發現 tf.keras 限制了你的應用領域,你還有其他選擇:


使用獨立於 Keras 模型定義的 tf.keras 神經層,並編寫自己的梯度和訓練程式碼。類似地,你可以單獨使用tf.keras.optimizers,tf.keras.initializers,tf.keras.losses或tf.keras.metrics。


  • 同時,你也可以完全忽略 tf.keras,使用較低層級的 TensorFlow,Python 和 AutoGraph 來獲得你想要的結果。


這完全取決於你!請注意,tf.layers 中的非面向物件層將被棄用,tf.contribution(包括高階API,如 tf.contribution.slim 和 tf.contribution.learn)在 TF 2.0 中將不可用。


Estimators會發生哪些變化?


Estimator 在 Google 和 TensorFlow 社群的應用都十分廣泛。 我們已經將幾種模型打包為 Premade Estimators,包括線性分類器,DNN 分類器,組合 DNN 線性分類器(又名 寬深模型)和梯度增強樹。 這些模型已經投入生產並得到廣泛部署,由於這些原因,包括 Premade Estimators 在內的Estimator API 將包含在 TensorFlow 2.0 中。


對於 Premade Estimators 的使用者來說,Keras 和 Eager Execution 焦點變化帶來的的影響將是微乎其微的。我們可能會更改 Premade Estimators 的實現,同時保持 API 的介面相同。我們還將努力新增作為 Premade Estimators 實現的模型的 Keras 版本,並擴充套件 Keras 以更好地滿足大規模生產的要求。


也就是說,如果你正在開發自定義體系結構,那我們建議使用 tf.keras 來構建模型而不是Estimator。如果你正在構建需要用到 Estimators 的基礎架構,那麼可以使用model_to_estimator() 來轉換模型,同時我們也努力確保Keras可以跨TensorFlow生態系統工作。


進擊到TensorFlow 2.0!


希望大家可以和我們一樣喜歡使用 tf.keras 。在接下來幾個月的時間,TensorFlow 團隊將關注於提升開發者們的體驗。在我們的文件和教程裡也將會體現這點。我們也期待您的想法和反饋,並通過 Github issues 和 PRs 為專案作出貢獻。感謝大家!


社群資源:

https://www.tensorflow.org/community/

原文連結:

https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a


本文為AI科技大本營原創文章,轉載請聯絡微信1092722531。


公開課預告

文字分類

文字分類問題是企業在NLP領域中處理文字資料時經常會遇到的一個問題,很多時候,我們需要將文字資訊進行分類,或提相關的介面以供外部進行文字上傳,在針對於使用者所上傳的文件資訊就需要進行文件內容的分類,那麼針對於這個需求我們就需要使用到文字分類的相關模型和演算法進行處理。本次演講就是從這個角度入手,通過對比來闡述不同的演算法、模型在實際的應用過程中的區別,以及在文字分類實踐中所遇到的各種坑。


640?wx_fmt=jpeg

推薦閱讀