本文轉自公眾號 新智元,原文地址
作為全球最受歡迎的機器學習開源框架,在TensorFlow 發展的3年里,見證了機器學習和人工智慧領域的快速發展和變化;與人類的孩子一樣,不斷學習,遭到批評,遇到對手,走向更大、更廣闊的環境。
而TensorFlow 2.0作為一個重要的里程碑,將更加關注其「易用性」,更注重使用的低門檻,旨在讓每個人都能應用機器學習技術。
那麼在架構方面,又會有何不同呢?話不多說,來看下新架構圖:
在過去的幾年中,開發團隊為TensorFlow添加了許多組件,而在2.0版本中,這些組件將被打包成一個綜合平台,可支持機器學習的工作流程(從訓練到部署)。正如上圖所示。
儘管新架構中的訓練部分主要關注Python API,但是TensorFlow.js還支持訓練模型。其他語言綁定(language binding)也有不同程度的支持,包括Swift、R和Julia等。
最近,官方宣布Keras作為一個用戶友好的機器學習API標準,將成為用於構建和訓練模型的高級API。 Keras API讓用戶可以輕鬆開始使用TensorFlow。尤其重要的是,Keras提供了幾個模型構建API(順序,功能和子類),因此您可以為項目選擇正確的抽象級別。
Keras API使得上手TensorFlow非常容易。重要的是,Keras提供了幾個模型構建API(Sequential、Functional以及Subclassing),因此用戶可以選擇正確的抽象化(abstraction)級別,TensorFlow的實現包含增強功能,包括eager execution、立即迭代(immediate iteration)和直觀調試(intuitive debugging),以及tf.data,用於構建可擴展的輸入pipeline。
TensorFlow的實現包含增強功能,包括急切執行,立即迭代和直觀調試,以及tf.data,用於構建可擴展的輸入管道。
以下是一個工作流程示例:
1、使用tf.data載入數據。使用輸入管道讀取訓練數據,輸入管道使用tf.data創建。利用tf.feature_column描述特徵,如分段和特徵交叉。此外還支持內存數據的便捷輸入(如NumPy)。
2、使用tf.keras構建、訓練並驗證模型,或者使用Premade Estimators。Keras與TensorFlow的其餘部分緊密集成,因此用戶可以隨時訪問TensorFlow的函數。如線性或邏輯回歸、梯度上升樹、隨機森林等也可以直接使用(使用tf.estimatorAPI實現)。如果不想從頭開始訓練模型,用戶也可以很快利用遷移學習來訓練使用TensorFlow Hub模塊的Keras或Estimator模型。
3、快速執行運行和調試過程,然後使用tf.function充分利用圖形的優勢。在默認情況下,TensorFlow 2.0按快速執行方式運行,以便於順利調試。此外,tf.function注釋可以方便地將Python程序轉換為TensorFlow圖形。此過程保留了1.x TensorFlow基於圖形的執行的所有優點:性能優化,遠程執行以及方便序列化、導出和部署的能力,同時實現了在Python中表達程序的靈活性和易用性。
4、使用分散式策略進行分散式訓練。對於大型機器學習訓練任務,分散式策略API可以輕鬆地在不同硬體配置上分配和訓練模型,無需更改模型的定義。由於TensorFlow支持各種硬體加速器,如CPU,GPU和TPU,因此用戶可以將訓練負載分配到單節點/多加速器以及多節點/多加速器配置上(包括TPU Pod)。這個API支持多種群集化配置,也提供了在本地或雲環境中部署Kubernetes群集訓練的模板。
5、導出到Saved Model。 TensorFlow將對Saved Model進行標準化,作為TensorFlow服務的一部分,他將成為TensorFlow Lite、TensorFlow.js、TensorFlow Hub等格式的可互換格式。
構建模型,如此簡單!
TensorFlow始終為生產提供了直接部署方式。無論是部署在伺服器、邊緣設備還是Web上,TensorFlow都可以讓用戶對模型實現輕鬆訓練和部署。無論用戶使用何種語言或平台。在TensorFlow 2.0中,我們通過標準化互換格式和API對齊來提高跨平台和組件的兼容性。
訓練並保存模型後,可以直接在應用程序中執行,也可以使用其中一個部署庫為其提供服務:
TensorFlow服務:TensorFlow庫,允許通過HTTP / REST或gRPC /協議緩衝區提供模型。
TensorFlow Lite:TensorFlow針對移動和嵌入式設備的輕量級解決方案提供了在Android,iOS和嵌入式系統(如Raspberry Pi和Edge TPU)上部署模型的功能。
TensorFlow.js:允許在JavaScript環境下部署模型,如在Web瀏覽器或伺服器端通過Node.js實現部署。TensorFlow.js還支持使用類似Keras的API在JavaScript中定義模型並直接在Web瀏覽器中進行訓練。
TensorFlow還支持其他語言,包括C,Java,Go,C#,Rust,Julia,R等。
功能強大的面向研究的實驗環境
TensorFlow 2.0集成了許多功能,可以在不損失速度和性能的情況下定義和訓練最先進的模型:
Keras Functional API和Model Subclassing API:可以創建複雜的拓撲,包括使用殘差層,自定義多輸入/輸出模型以及強制寫入的前向傳遞。
自定義訓練邏輯:使用tf.GradientTape和tf.custom_gradient對梯度計算進行細粒度控制。
為了獲得更大的靈活性和可控性,低級的TensorFlowAPI是始終可用的,並可與更高級的抽象概念工具結合使用,以實現完全可定製的邏輯。
TensorFlow 2.0帶來了一些新增功能,允許研究人員和高級用戶進行實驗,使用豐富的擴展,如Ragged Tensors,TensorFlow Probability,Tensor2Tensor等。
除了這些功能外,TensorFlow還提供了易於執行的簡單原型設計和調試,分散式策略API和AutoGraph,可以進行大規模訓練,並支持TPU,這些都使TensorFlow 2.0成為一個易於使用、可定製且高度可擴展的平台,可用於實現最先進的技術,進行機器學習研究,並將研究轉化為生產流程。
TensorFlow 1.x和2.0之間的差異
自從首次開源TensorFlow以來,我們已經發布了多個版本的API迭代。隨著機器學習的快速發展,現在TensorFlow已經發展壯大,支持多樣化的用戶組合,可以滿足各種需求。使用TensorFlow 2.0,用戶有機會根據語義版本控制來實現平台的清理和模塊化。
以下是一些較大的變化:
移除了隊列運行器以支持tf.data。
移除了圖表集合。
變數處理方式的變化。
可對API符號進行移動和重命名
更高的兼容性和連續性
為了讓用戶向TensorFlow 2.0的遷移更加容易,我們將發布一個轉換工具,它可以對TensorFlow 1.x Python代碼進行更新,以使用TensorFlow2.0兼容的API,或者對無法自動轉換的代碼予以標記。
當然,並非所有的更改都可以完全自動完成。比如,某些已被棄用的API沒有直接的可替代對象。所以我們引入了tensorflow.compat.v1兼容性模塊,該模塊保留了對完整TensorFlow 1.x API(不包括tf.contrib)的支持。該模塊將在整個TensorFlow 2.x的生命周期內保持維護,並允許使用TensorFlow 1.x編寫的代碼維護功能。
此外,Saved Model或保存的GraphDefs將向後兼容。使用1.x版本保存的SavedModels將繼續能夠在2.x中載入和執行。但是,2.0中的原始檢查點中的變數名稱可能會發生更改,因此,使用已轉換為2.0版本代碼中的2.0之前版本的檢查點可能無法正常工作。
我們相信,TensorFlow 2.0將為開發者社區帶來巨大利益,為了讓這次版本轉換變得盡量簡單方便,我們投入了大量精力。
但是,我們也認識到,版本遷移需要時間,我們非常關心社區成員目前對學習和使用TensorFlow的投入。我們將在最後的1.x版本中提供12個月的安全補丁,以便為現有用戶提供充足的時間進行過渡,並順利獲得TensorFlow2.0的所有優勢。
參考鏈接:
Comments