如果你需要深度學習模型,那么 PyTorch 和 TensorFlow 都是不錯的選擇。
并非每個回歸或分類問題都需要通過深度學習來解決。甚至可以說,并非每個回歸或分類問題都需要通過機器學習來解決。畢竟,許多數據集可以用解析方法或簡單的統計過程進行建模。
另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用 PyTorch 和 TensorFlow ,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。
【PyTorch】
PyTorch 建立在舊版的 Torch 和 Caffe2 框架之上。如其名所示,PyTorch采用了腳本語言 Python,并利用改版后的Torch C/CUDA作為后端。PyTorch 項目還融入了 Caffe2 的生產功能。
PyTorch 被稱為“擁有強大 GPU 加速功能的 Python 版 Tensor 和動態神經網絡。”這意味著什么?
Tensor(張量)是一種物理學和工程學中廣泛使用的數學結構。2 階的 Tensor 是一種特殊的矩陣;而對向量和張量取內積就可以得到另一個擁有新長度和新方向的向量。TensorFlow 這個名字就來自張量在其網絡模型中流動的方式。NumPy 也用到了 Tensor,名為 ndarray 。
GPU 加速是大多數現代深度神經網絡框架的基礎。動態神經網絡是一種特殊的神經網絡,每次迭代都會發生變化,例如,PyTorch 模型可以在訓練期間通過添加和刪除隱藏層,來提高其準確性和通用性。
PyTorch 會在每個迭代中實時重建計算圖。相比之下,在默認情況下TensorFlow 會創建一個計算圖,優化圖代碼以提高性能,然后訓練模型。
雖然急切執行模式在 TensorFlow 中剛剛出現,但其是 PyTorch 唯一的運行方式:API 在被調用時會立即執行,而不會被添加到計算圖稍后再運行。這樣可能看起來計算效率會低一些,但是 PyTorch 設計的工作方式就是如此,而且實際上在訓練或預測速度方面并不遜色。
PyTorch 通過集成加速庫,比如英特爾 MKL、Nvidia cuDNN 和 NCCL 等,最大限度地提升速度。其核心CPU、GPU Tensor和神經網絡后端TH(Torch)、THC(Torch CUDA)、THNN(Torch神經網絡)和THCUNN(Torch CUDA神經網絡)等,都是使用 C99 API 編寫的單獨庫。同時,PyTorch 并不是整體式 C++ 框架的 Python 綁定。其目的是與Python 深度集成,并允許使用其他 Python 庫。
【Fast.ai與fastai庫】
Fast.ai 是一家小公司,他們通過為編程人員提供免費課程、軟件庫、尖端研究和社區,降低深度學習的難度,并吸引更多各種背景的人。
fastai 庫基于 PyTorch,通過現代化的最佳實踐簡化了快速準確的神經網絡訓練。它基于對 Fast.ai 深度學習最佳實踐的研究,提供了包括視覺、文本、表格和協作(協作過濾)模型在內的“開箱即用”支持。
fastai 庫與 PyTorch 的關系非常類似于 Keras 與 TensorFlow 。但明顯的區別在于,PyTorch 沒有正式支持 fastai 。
【TensorFlow】
TensorFlow 是眾多優秀的機器學習和深度學習框架中最成熟的一個,也是研究論文中引用最多的一個(即使不算來自谷歌員工的引用也是第一),而且在生產中的使用效果也很好。它可能不是最容易學習的框架,但隨著 TensorFlow 2的到來,TensorFlow 的門檻也沒有 2016 年那般高了。TensorFlow 是許多 Google 服務的基礎。
TensorFlow 2.0 官網對該項目的描述為:“端到端的開源機器學習平臺。”,谷歌通過“平臺”提供了一個包含工具、庫以及社區資源的全方位生態系統,研究人員可以利用這個平臺“推動機器學習達到最高水準”,而開發人員則可以利用這個平臺輕松構建和部署基于 AI 的應用程序。
TensorFlow 2.0 有四個主要部分組成:
TensorFlow 核心,一個用于開發和培訓機器學習模型的開源庫;
TensorFlow.js,一個在 Web 瀏覽器和 Node.js 上訓練和部署模型的 JavaScript庫;
TensorFlow Lite,一個輕量級庫,用于在移動和嵌入式設備上部署模型;
TensorFlow Extended,是一個端到端平臺,用于在大型生產環境中準備數據、培訓、驗證和部署模型。
TensorFlow 2.0 的重點放在了簡單性和易用性上,其這個版本擁有一系列的新功能,包括急切執行、直觀的高級 API 以及可以在任何平臺上構建模型等。急切執行意味著 TensorFlow 代碼定義好就可以運行,而 TensorFlow 最初的模式需要將節點和邊添加到計算圖中,稍后再在會話中運行。
高效地使用 TensorFlow 2.0 方法是,使用高級的 tf.keras API(而不是舊的低級 AP,這樣可以大大減少需要編寫的代碼量。只需要使用一行代碼就可以構建 Keras 神經網絡中的一層,如果利用循環結構,則可以進一步減少代碼量。
TensorFlow.js 是一個利用 JavaScript 開發和訓練機器學習模型,并在瀏覽器或 Node.js 中部署模型的庫。在 TensorFlow.js、ml5.js 之上還有一個高級庫,它隱藏了張量和優化器的復雜性。
TensorFlow.js 可以通過瀏覽器支持移動設備和桌面設備。如果你的瀏覽器支持 WebGL 著色器 API,TensorFlow.js 可以利用它們發揮 GPU 的優勢。與CPU 后端相比,這可以為你提供高達 100 倍的加速。在擁有 GPU 的計算機上,TensorFlow.js 可以非常快速地在瀏覽器中運行。
TensorFlow Lite 是一個用于移動設備的開源深度學習框架。目前它可以為iOS、ARM64 和 Raspberry Pi 構建模型。TensorFlow Lite 有兩個主要組件:解釋器和轉換器。解釋器可以在許多不同的硬件類型上運行經過特別優化的模型。轉換器可以將 TensorFlow 模型轉換為高效的形式供解釋器使用,還可引入優化以縮小可執行文件大小并提高性能。
TensorFlow Extended(TFX)是用于部署生產機器學習管道的端到端平臺。在你訓練好一個模型后,就需要考慮這方面的工作了。管道包括數據驗證、功能工程、建模、模型評估、服務推斷以及管理在線、原生移動和 JavaScript 目標的部署。
【Keras】
Keras 是用于構建神經網絡模型的高級前端規范和實現。Keras 支持三種后端深度學習框架:TensorFlow、CNTK 和 Theano。目前亞馬遜正在全力為Keras 開發 MXNet 后端。你也可以使用 PlaidML(一個獨立的項目)作為Keras 的后端,利用 PlaidML 的 OpenCL 支持所有 GPU 的優勢。
TensorFlow是Keras的默認后端,在很多情況下我們也推薦使用TensorFlow,包括通過 CUDA 和 cuDNN 在 Nvidia 硬件上實現 GPU 加速,以及利用 Google Cloud 中的 Tensor 處理單元加速等。Keras 除了可以單獨安裝之外,TensorFlow 還包含一個內部 tf.keras 類。如上所述,這是TensorFlow 的首選高級前端。
Keras 提供了一個高級環境,在其 Sequential 模型中向神經網絡添加一層的代碼量可以縮減到一行,編譯和訓練模型也分別只需一個函數調用。如果有需要,Keras 也允許你通過其 Model 或函數式 API 接觸較低層上的代碼。
你還可以利用 Keras 的子類 keras.Model 進一步深入,一直到 Python 代碼級別,直到找到你喜歡的功能 API 。另外,它還有 Scikit-learn API,因此你可以利用 Scikit-learn 網格搜索在 Keras 模型中執行超參數優化。
【深度學習與遷移學習】
PyTorch 和 TensorFlow 都支持深度學習和遷移學習。遷移學習(有時稱為自定義機器學習)可以從預先訓練好的神經網絡模型開始,只需為你的數據定制最終層即可。
從頭開始訓練深度神經網絡非常耗時,并且需要大量標記數據。遷移學習花費的時間更少,而且需要的新標記樣本更少,但只有在模型已預先訓練好的情況下,你才可以使用遷移學習。幸運的是,所有主流的深度學習框架都提供了某種形式的模型庫供你挑選模型。
圖像分類中使用的卷積神經網絡(也稱為 ConvNets 或 CNN )是遷移學習的代表。PyTorch 和 TensorFlow 都提供了有關如何使用遷移學習來訓練卷積神經網絡的教程。TensorFlow 的遷移學習教程演示了如何使用遷移學習提取和微調特征。PyTorch 的遷移學習教程也演示了相同的兩種方法。
以下是這些筆記中提到的一個關鍵點:
實際上,很少有人從頭開始訓練整個卷積網絡(利用隨機的初始化),因為你很難擁有足夠大的數據集。相反,一般人們會在非常大的數據集(例如ImageNet,其中包含 1,000 個類別的 120 萬個圖像)上預先訓練ConvNet,然后以 ConvNet 為起點或通過 ConvNet 提取感興趣的特征。
【如何選擇深度學習框架】
在 PC 和 Mac 出現的早期,人們經常會問我應該買哪個。其實,這個問題沒有正確的答案,因為這個問題本身就是一個錯誤,或者我應該說“那要看你想用這臺電腦干什么”,但一般在我問他們幾個問題后,他們就能找到自己的答案,比如“你想用這臺電腦干什么?”,或者“你有什么不可或缺的應用嗎?”
同樣,“我應該使用哪種深度學習框架?”也算不上一個真正的問題。這個問題同樣取決于你自己,比如首先想一想“你想用你的模型干什么?”,然后再深入研究你可以用于訓練的數據類型。
如果你不熟悉深度學習,那么我建議你先閱讀 TensorFlow 2 中的 Keras 教程,以及 PyTorch 中的 fastai 教程。即使不深入了解 TensorFlow 和PyTorch 的低級 API ,你也有很多東西需要學習,而且你應該對這兩種方法都有所了解。然后,你可能會意識到這兩個框架的確有多相似之處,而且它們賴以生存的概念和技術都是相同的。
在很多情況下,選用哪種框架無關緊要:你會發現每個框架可用的模型基本相同。在某些特定的情況下,可能某個框架優于另一個——至少在當前版本是如此。你可能還會發現,學習其中某一個更為容易,原因可能是框架中的某些基本功能,也有可能是教程的質量。
審核編輯:郭婷
-
python
+關注
關注
56文章
4792瀏覽量
84628 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113 -
pytorch
+關注
關注
2文章
807瀏覽量
13200
原文標題:掌握深度學習,為什么要用PyTorch、TensorFlow框架?
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論