­

動態 | TensorFlow 2.0 新特性來啦,部分模型、庫和 API 已經可以使用

  • 2019 年 11 月 1 日
  • 筆記
AI 科技評論按:雖然 TensorFlow 2.0 還沒有正式發佈,但日前,TensorFlow 團隊發佈一篇文章,宣布了 TensorFlow 2.0 裏面將會有的新變化,雷鋒網 AI 科技評論編譯整理如下:

由於令人難以置信的多樣化社區,TensorFlow 已經發展成為世界上最受歡迎和廣泛採用的 ML 平台之一。這個社區包括:

  • 研究人員(例如,預測地震餘震和檢測乳腺癌)
  • 開發人員(例如,開發應用程序以識別患病植物和幫助人們減肥)
  • 公司(例如,通過 eBay、Dropbox 和 AirBnB 改善客戶體驗)
  • 其它

去年 11 月,TensorFlow 慶祝了它的第三個生日,並回顧了這些年來增加的功能。我們很高興迎來了另一個重要的里程碑:TensorFlow2.0。

TensorFlow 2.0 將重點放在簡單和易用性上,它做了以下更新:

  • 用 Keras 建立簡單的模型並執行
  • 在任何平台上的生產中進行強大的模型部署
  • 強大的研究實驗
  • 通過清除不推薦使用的 API 和減少重複來簡化 API

在過去的幾年中,我們在 TensorFlow 中添加了許多組件。在 TensorFlow 2.0 中,這些組件將被打包成一個綜合性平台,支持從訓練到部署的機器學習工作流。讓我們用一張簡化的概念圖來看看 TensorFlow2.0 的新架構,如下所示:

注意:儘管本圖的訓練部分側重於 Python API,但 TensorFlow.js(https://js.tensorflow.org/) 也支持訓練模型。它不同程度地支持其它語言,這些語言包括:Swift、R 和 Julia。

簡單的模型構建

在最近的一篇博文(https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a)中,我們宣布,用於機器學習的用戶友好的 API 標準 Keras (https://www.tensorflow.org/guide/keras)將成為用於構建和訓練模型的主要高級 API。Keras API 使得使用 TensorFlow 變得容易。重要的是,Keras 提供了幾個模型構建 API,因此您可以為項目選擇正確的抽象級別。TensorFlow 的實現包含一些增強功能,包括用於即時迭代和直觀調試的功能等。

下面是一個工作流示例(在接下來的幾個月里,我們將努力更新下面鏈接的指南):

  1. 使用 tf.data 加載數據。使用 tf.data 創建的輸入管道讀取訓練數據。還支持從內存(例如 Numpy)方便地輸入數據。
  2. 使用 tf.keras 構建、訓練和驗證您的模型,或者使用 Premade Estimators 來驗證您的模型。Keras 與 TensorFlow 的其餘部分緊密集成,因此您可以隨時使用 TensorFlow 的功能。一組標準的打包模型(例如線性回歸、邏輯回歸、隨機森林)也可以直接使用(使用 tf.estimator API 實現)。如果您不想從頭開始訓練一個模型,您很快就能使用遷移學習來訓練一個使用TensorFlowHub 模塊的 Keras 或 Estimator 模型。
  3. 使用 eager execution 運行和調試,然後使用 tf.function。TensorFlow 2.0 在默認情況下運行時有很強的執行能力。此外,tf.function 注釋會將 python 程序轉換為 TensorFlow 圖。這個過程保留了基於 1.x TensorFlow 執行的所有優點:性能優化、遠程執行以及易於序列化、導出和部署的能力。
  4. 使用分發策略進行分發訓練。對於大型 ML 訓練任務,分發策略 API 使在不更改模型定義的情況下,可以輕鬆地在不同的硬件配置上分發和訓練模型。由於 TensorFlow 支持一系列硬件加速器,如 CPU、GPU 和 TPU,因此您可以將訓練工作量分配到單節點/多加速器以及多節點/多加速器配置,包括 TPU Pods。
  5. 導出到 SavedModel。TensorFlow 將在 SavedModel 上作為 TensorFlow 服務、TensorFlow Lite、TensorFlow.js、TensorFlow Hub 等的交換格式進行標準化。

在任何平台上的生產中進行強大的模型部署

一直以來,TensorFlow 為生產提供了直接途徑。無論是在服務器、邊緣設備還是網絡上,使用何種語言或平台,TensorFlow 都可以讓您輕鬆地訓練和部署模型。在 TensorFlow 2.0 中,我們通過標準化交換格式和調整 API 來改進平台和組件之間的兼容性和奇偶性。

一旦您訓練並保存了模型,就可以直接在應用程序中執行它,或者使用部署庫為其提供服務:

  • TensorFlow 服務(https://www.tensorflow.org/tfx/serving/):允許模型通過 HTTP/REST 或 GRPC/協議緩衝區提供服務的 TensorFlow 庫。
  • TensorFlow Lite(https://www.tensorflow.org/mobile/tflite/):TensorFlow 針對移動和嵌入式設備的輕量級解決方案提供了在 Android、iOS 和嵌入式系統上部署模型的能力。
  • tensorflow.js:支持在 JavaScript 環境中部署模型,例如在 Web 瀏覽器或服務器端通過 Node.js 部署模型。TensorFlow.js 還支持在 JavaScript 中定義模型,並使用類似於 KERA 的 API 直接在 Web 瀏覽器中進行訓練。

TensorFlow 還支持其他語言(一些由更廣泛的社區維護),包括 C、Java、Go、C#、Rust、Julia、R 等。

強大的研究實驗

TensorFlow 2.0 包含了許多功能,可以在不犧牲速度或性能的情況下定義和訓練最先進的模型:

  • Keras 功能 API 和 Model Subclassing API:允許創建複雜的拓撲結構,包括使用剩餘層、自定義多輸入/輸出模型和前向迭代。
  • 自定義訓練邏輯:使用 tf.GradientTape 和 tf.custom_gradient 對梯度計算進行細粒度控制。
  • 為了實現更大的靈活性和更好的控制性,低級 TensorFlow API 始終可用,並通常與高級抽象 API 結合使用,以實現完全可定製的邏輯。

TensorFlow 2.0 帶來了一些新的補充,允許研究人員和高級用戶使用豐富的擴展進行實驗,如 Ragged Tensors、TensorFlow Probability、Tensor2Tensor 以及更多有待公布的內容。

TensorFlow 1.x 和 2.0 之間的差異

以下是一些更大的變化:

  • 刪除支持 tf.data 的隊列運行程序
  • 移除圖集合
  • 變量處理方式的更改
  • API 符號的移動和重命名

此外,tf.contrib 將從核心 TensorFlow 存儲庫和構建過程中刪除(https://github.com/tensorflow/community/pull/18)。TensorFlow 的 contrib 模塊已經超出了在單個存儲庫中可以維護和支持的範圍。較大的項目單獨維護會更好,而較小的擴展將整合到核心 TensorFlow 代碼。

兼容性和連續性

為了簡化代碼遷移到 TensorFlow 2.0 的過程,將有一個轉換工具,它可以更新 TensorFlow 1.x Python 代碼以使用與 TensorFlow 2.0 兼容的 API,並將無法自動轉換的代碼標記出來。

此外,SavedModel 和 GraphDef 將向後兼容。用 1.x 版本保存的 SavedModel 格式的模型將繼續在 2.x 版本中加載和執行。但是,2.0 版本中的變更將意味着原始檢查點中的變量名可能會更改,因此使用 2.0 版本之前的檢查點(代碼已轉換為 2.0 版本)並不保證能正常工作。有關詳細信息,請參閱 TensorFlow 2.0 指南。

TensorFlow 2.0 的時間線

TensorFlow 2.0 將於今年年初公開發佈。但為什麼要等到那個時候?您已經可以使用 tf.keras 和 Eager execution、預打包模型和部署庫來開發 TensorFlow2.0 方法。今天,部分分發策略 API 也已經可用。

我們對 TensorFlow2.0 和它即將帶來的變化感到非常興奮。TensorFlow 已經從一個用於深度學習的軟件庫成長為所有包括類型機器學習的整個生態系統。對所有平台上的所有用戶來說,TensorFlow 2.0 將簡單且易用。