官方解讀:TensorFlow 2.0中即將到來的所有新特性

機器之心發表於2019-01-15

四天前,TensorFlow 2.0 預覽版終於上線了,看來穩定版距離我們也不會太遠——按照官方說法會是今年的第一個季度。近日,TensorFlow 官方部落格全面介紹了 2.0 版的所有新特性。為了讓開發者們簡單高效地搭建模型,2.0 版本經過了大幅度重建。

作為最流行的深度學習框架,TensorFlow 已經成長為全球使用最廣泛的機器學習平臺。目前,TensorFlow 的開發者社群包括研究者、開發者和企業等。

去年 11 月,TensorFlow 慶祝了自己的三歲生日。不久之後,也將迎來另一個重要里程碑——TensorFlow 2.0。

TensorFlow 2.0 將專注於簡潔性和易用性,主要升級方向包括:

  • 使用 Keras 和 eager execution 輕鬆構建模型。

  • 在任意平臺上實現穩健的生產環境模型部署。

  • 為研究提供強大的實驗工具。

  • 通過清理廢棄的 API 和減少重複來簡化 API。

谷歌表示,在過去幾年裡,TensorFlow 增加了很多元件。通過 TensorFlow 2.0 版本的大幅度重建,這些功能將被打包成為一個綜合平臺,支援從訓練到部署的整個機器學習工作流程。下圖簡要展示了 TensorFlow 2.0 的新架構:

官方解讀:TensorFlow 2.0中即將到來的所有新特性

Note:雖然上圖的訓練部分側重 Python API,但是 TensorFlow.js 也支援訓練模型。TensorFlow 2.0 對其他語言也有不同程度的支援,包括 Swift、R 語言和 Julia

輕鬆構建模型

TensorFlow 團隊近期宣佈 Keras API 將成為 TensorFlow 中構建和訓練模型的核心高階 API。Keras API 使得使用 TensorFlow 開啟專案變得簡單。重要的是,Keras 提供多個模型構建 API(Sequential、Functional 和 Subclassing),這樣你可以選擇適合自己專案的抽象級別。TensorFlow 的實現有多項增強,包括可直接迭代和直觀除錯的 eager execution,以及用於構建可擴充套件輸入流程的 tf.data。

以下是工作流程示例(在接下里的幾個月中,我們將努力更新以下連結的指南):

  1. 用 tf.data 載入資料。用 tf.data 建立的輸入執行緒讀取訓練資料。使用 tf.feature_column 描述特徵特性,例如分段和特徵交叉。還支援從記憶體資料(例如 NumPy)中方便地輸入。

  2. 使用 tf.keras、Premade Estimators 構建、訓練和驗證模型。Keras 與 TensorFlow 的其餘部分緊密整合,因此你可以隨時訪問 TensorFlow 的功能。一組標準的打包模型(例如,線性或邏輯迴歸、梯度增強樹、隨機森林)也可以直接使用(使用 tf.estimator API 實現)。如果你不想從頭開始訓練一個模型,你很快就能通過 TensorFlow Hub 的模組利用遷移學習來訓練 Keras 或 Estimator 模型。

  3. 用 eager execution 執行和除錯,然後在圖形上使用 tf.function。TensorFlow 2.0 預設用 eager execution 執行,以便於輕鬆使用和順利除錯。此外,tf.function 註釋透明地將 Python 程式轉換成 TensorFlow 圖。這個過程保留了 TensorFlow1.x 基於圖形執行的所有優點:效能優化、遠端執行,以及序列化、匯出和部署的能力,同時增加了用簡單 Python 表達程式的靈活性和易用性。

  4. 使用分散式策略進行分散式訓練。對於大部分 ML 訓練任務來說,Distribution Strategy API 使得在不同的硬體配置上分佈和訓練模型變得很容易,而無需改變模型定義。由於 TensorFlow 為一系列硬體加速器(如 CPU、GPU、TPU)提供支援,你可以將訓練工作負載分配給單節點/多加速器以及多節點/多加速器配置,包括 TPU Pods。儘管這個 API 支援多種群集配置,但提供了在本地或雲環境中的 Kubernete 叢集上部署訓練的模板。

  5. 匯出至 SavedModel。TensorFlow 將在 SavedModel 上標準化,來作為 TentsorFlow Serving、TensorFlow Lite、TensorFlow.js、TentsorFlow Hub 等的交換格式。

在任意平臺上實現穩健的生產環境模型部署

TensorFlow 總是會提供直接的產品化路徑。不論是在伺服器、邊緣裝置還是網頁上,也不論你使用的是什麼語言或平臺,TensorFlow 總能讓你輕易訓練和部署模型。在 TensorFlow 2.0 中,我們正在通過標準化交換格式和調整 API 來改進跨平臺和元件的相容性和奇偶性(parity)。

  • TensorFlow Serving:允許通過 HTTP/REST 或 gRPC /協議緩衝區為模型提供服務的 TensorFlow 庫。

  • TensorFlow Lite:TensorFlow 針對移動和嵌入式裝置的輕量級解決方案提供了在 Android、iOS 和嵌入式系統(如 Raspberry Pi 和 Edge TPU)上部署模型的能力。

  • TensorFlow.js:支援在 JavaScript 環境中部署模型,例如通過 Node.js. TensorFlow.js 在 web 瀏覽器或伺服器端部署模型,還支援在 JavaScript 中定義模型和在 web 瀏覽器中使用類似 Keras 的 API 直接訓練模型。

TensorFlow 還支援其它語言(由更廣泛的社群維護),包括:C、Java、Go、C#、Rust、Julia、R 等等。

為研究提供強大的實驗工具

TensorFlow 使得從概念到程式碼和從模型到出版物中獲取新想法變得更加容易。TensorFlow 2.0 結合了很多功能,能夠在不犧牲速度或效能的情況下定義和訓練最先進的模型:

  • Keras Functional API 和 Model Subclassing API:允許建立複雜的拓撲,包括使用殘差層、自定義多輸入/輸出模型以及強制編寫的正向傳遞。

  • 自定義訓練邏輯:用 tf.GradientTape 和 tf.custom_gradient 對梯度計算進行細粒度控制。

  • 為了獲得更強的靈活性和控制,低階 TensorFlow API 始終可用,並與更高階別的抽象一起工作,以實現完全可定製的邏輯

TensorFlow 2.0 新添了一些附加功能,讓研究人員和高階使用者可以使用豐富的外掛來進行實驗,如 Ragged Tensors、TensorFlow Probability、Tensor2Tensor 等。

除了這些功能之外,TensorFlow 還提供了易於製作原型和除錯的 eager execution,可以大規模訓練的 Distribution Strategy API 和 AutoGraph,以及對 TPU 的支援,使 TensorFlow 2.0 成為一個易於使用、可定製和高度可擴充套件的平臺,用於展開最先進的 ML 研究並將該研究轉化為生產流水線。

TensorFlow 1.x 和 2.0 的區別

自我們開源 TensorFlow 以來,到現在已經發展出很多個版本和 API 迭代。隨著 ML 的快速發展,這個平臺也有了巨大的進展,現在支援很多具有不同需求的不同使用者。有了 TensorFlow 2.0,我們有機會基於語義版本控制來清理和模組化平臺。

此次的重大改變包括:

  • 刪除 queue runner 以支援 tf.data。

  • 刪除圖形集合。

  • 變數處理方式的變化。

  • API 符號的移動和重新命名。

此外,tf.contrib 將從核心 TensorFlow 儲存庫和構建過程中移除。TensorFlow 的 contrib 模組已經超出了單個儲存庫可以維護和支援的範圍。較大的專案最好單獨維護,而較小的擴充套件將逐漸移至核心 TensorFlow 程式碼。一個特別興趣小組(SIG)已經成立,以維持和進一步發展一些更重要的未來 contrib 專案。如果你有興趣貢獻,請聯絡以下 RFC:

https://github.com/tensorflow/community/pull/37

相容性和持續性

為了簡化向 TensorFlow 2.0 的過渡,將會有一個轉化工具來更新 TensorFlow 1.x Python 程式碼,以使用 TensorFlow 2.0 相容的 API,或標記程式碼無法自動轉換的情況。

不是所有的變化都可以完全自動化進行。例如,一些被棄用的 API 沒有直接的等效物。這也是我們要引入 tensorflow.compat.v1 相容性模組的原因,該模組支援完整的 TensorFlow 1.x API(包括 tf.contrib)。該模組將會在 TensorFlow 2.x 的時間線內得到維護,並允許用 TensorFlow 1.x 編寫的程式碼保持功能。

此外,SavedModels 或儲存的 GraphDefs 將向後相容。用 TensorFlow 1.x 儲存的 SavedModels 將繼續在 2.x 中載入和執行。然而,2.0 中的更改意味著原始檢查點中的變數名可能會更改,所以使用 2.0 之前的檢查點而程式碼已轉化為 2.0 時,可能無法保證有效。詳情可參閱 TensorFlow 2.0 指南:

https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/effective_tf2.md

我們相信,TensorFlow 2.0 將為社群帶來巨大的利益,我們也盡了最大的努力來讓轉化變得簡單。但是,我們也發現遷移現在的執行緒需要時間,我們非常重視社群當下在學習和使用 TensorFlow 方面的投入。我們將在最近的 1.x 版本中提供 12 個月的安全補丁,以為現有的使用者提供足夠的時間來過渡和利用 TensorFlow 2.0。

TensorFlow 2.0 時間線

TensorFlow 2.0 於今年年初發布預覽版。你現在已經可以通過使用 tf.keras 、eager execution、預打包模型和部署庫來開發 TensorFlow 2.0 了。Distribution Strategy API 也已經部分可用。

原文連結:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8?linkId=62351082

相關文章