選自Medium,做者:TensorFlow,機器之心編譯。git
四天前,TensorFlow 2.0 預覽版終於上線了,看來穩定版距離咱們也不會太遠——按照官方說法會是今年的第一個季度。近日,TensorFlow 官方博客全面介紹了 2.0 版的全部新特性。爲了讓開發者們簡單高效地搭建模型,2.0 版本通過了大幅度重建。github
做爲最流行的深度學習框架,TensorFlow 已經成長爲全球使用最普遍的機器學習平臺。目前,TensorFlow 的開發者社區包括研究者、開發者和企業等。web
去年 11 月,TensorFlow 慶祝了本身的三歲生日。不久以後,也將迎來另外一個重要里程碑——TensorFlow 2.0。
瀏覽器
TensorFlow 2.0 將專一於簡潔性和易用性,主要升級方向包括:安全
使用 Keras 和 eager execution 輕鬆構建模型。性能優化
在任意平臺上實現穩健的生產環境模型部署。服務器
爲研究提供強大的實驗工具。架構
經過清理廢棄的 API 和減小重複來簡化 API。框架
谷歌表示,在過去幾年裏,TensorFlow 增長了不少組件。經過 TensorFlow 2.0 版本的大幅度重建,這些功能將被打包成爲一個綜合平臺,支持從訓練到部署的整個機器學習工做流程。下圖簡要展現了 TensorFlow 2.0 的新架構:機器學習
輕鬆構建模型
TensorFlow 團隊近期宣佈 Keras API 將成爲 TensorFlow 中構建和訓練模型的核心高級 API。Keras API 使得使用 TensorFlow 開啓項目變得簡單。重要的是,Keras 提供多個模型構建 API(Sequential、Functional 和 Subclassing),這樣你能夠選擇適合本身項目的抽象級別。TensorFlow 的實現有多項加強,包括可直接迭代和直觀調試的 eager execution,以及用於構建可擴展輸入流程的 tf.data。
如下是工做流程示例(在接下里的幾個月中,咱們將努力更新如下連接的指南):
用 tf.data 加載數據。用 tf.data 建立的輸入線程讀取訓練數據。使用 tf.feature_column 描述特徵特性,例如分段和特徵交叉。還支持從內存數據(例如 NumPy)中方便地輸入。
使用 tf.keras、Premade Estimators 構建、訓練和驗證模型。Keras 與 TensorFlow 的其他部分緊密集成,所以你能夠隨時訪問 TensorFlow 的功能。一組標準的打包模型(例如,線性或邏輯迴歸、梯度加強樹、隨機森林)也能夠直接使用(使用 tf.estimator API 實現)。若是你不想從頭開始訓練一個模型,你很快就能經過 TensorFlow Hub 的模塊利用遷移學習來訓練 Keras 或 Estimator 模型。
用 eager execution 運行和調試,而後在圖形上使用 tf.function。TensorFlow 2.0 默認用 eager execution 運行,以便於輕鬆使用和順利調試。此外,tf.function 註釋透明地將 Python 程序轉換成 TensorFlow 圖。這個過程保留了 TensorFlow1.x 基於圖形執行的全部優勢:性能優化、遠程執行,以及序列化、導出和部署的能力,同時增長了用簡單 Python 表達程序的靈活性和易用性。
使用分佈式策略進行分佈式訓練。對於大部分 ML 訓練任務來講,Distribution Strategy API 使得在不一樣的硬件配置上分佈和訓練模型變得很容易,而無需改變模型定義。因爲 TensorFlow 爲一系列硬件加速器(如 CPU、GPU、TPU)提供支持,你能夠將訓練工做負載分配給單節點/多加速器以及多節點/多加速器配置,包括 TPU Pods。儘管這個 API 支持多種羣集配置,但提供了在本地或雲環境中的 Kubernete 集羣上部署訓練的模板。
導出至 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:
兼容性和持續性
爲了簡化向 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 指南:
咱們相信,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 也已經部分可用。