深度學習戰(zhàn)爭:Facebook支持的PyTorch與Google的TensorFlow
有一個令人震驚的事實,即人工智能和機器學習的工具和技術(shù)在近期迅速興起。深度學習,或者說“注射了激素的機器學習”,數(shù)據(jù)科學家和機器學習專家在這個領(lǐng)域有數(shù)不勝數(shù)等可用的庫和框架。很多這樣的框架都是基于 Python 的,因為 Python 是一個更通用,相對簡單的語言。Theano、Keras、 TensorFlow 是幾個基于 Python 構(gòu)建的流行的深度學習庫,目的是使機器學習專家更輕松。
Google 的 TensorFlow 是一個被廣泛使用的機器學習和深度學習框架。 TensorFlow 開源于 2015 年,得到了機器學習專家社區(qū)的廣泛支持,TensorFlow 已經(jīng)迅速成長為許多機構(gòu)根據(jù)其機器學習和深度學習等需求而選擇的框架。 另一方面,PyTorch 是由 Facebook 最近開發(fā)的用于訓練神經(jīng)網(wǎng)絡(luò)的 Python 包,改編自基于 Lua 的深度學習庫 Torch。 PyTorch 是少數(shù)可用的深度學習框架之一,它使用基于磁帶的自動梯度系統(tǒng),以快速和靈活的方式構(gòu)建動態(tài)神經(jīng)網(wǎng)絡(luò)。
在這篇文章中,我們將 PyTorch 與 TensorFlow 進行不同方面的比較。
讓我們開始吧!
什么編程語言支持 PyTorch 和 TensorFlow?
雖然主要是用 C++ 和 CUDA 編寫的,但 TensorFlow 包含一個位于核心引擎上的 Python API,使得更便于被Python 支持者使用。 除了 Python,它還包括 C++、Haskell、Java、Go 和 Rust 等其他 API,這意味著開發(fā)人員可以用他們的***語言進行編碼。
雖然 PyTorch 是一個 Python 軟件包,但你也可以提供使用基本的 C/C++ 語言的 API 進行編碼。 如果你習慣使用 Lua 編程語言,你也可以使用 Torch API 在 PyTorch 中編寫神經(jīng)網(wǎng)絡(luò)模型。
PyTorch 和 TensorFlow 有多么易于使用?
如果將 TensorFlow 作為一個獨立的框架使用,它可能會有點復雜,并且會給深度學習模型的訓練帶來一些困難。 為了減少這種復雜性,可以使用位于 TensorFlow 復雜引擎之上的 Keras 封裝,以簡化深度學習模型的開發(fā)和訓練。 TensorFlow 也支持 PyTorch 目前沒有的分布式培訓。 由于包含 Python API,TensorFlow 也可以在生產(chǎn)環(huán)境中使用,即可用于培訓練和部署企業(yè)級深度學習模型。
PyTorch 由于 Torch 的復雜用 Python 重寫。 這使得 PyTorch 對于開發(fā)人員更為原生。 它有一個易于使用的框架,提供***化的靈活和速度。 它還允許在訓練過程中快速更改代碼而不妨礙其性能。 如果你已經(jīng)有了一些深度學習的經(jīng)驗,并且以前使用過 Torch,那么基于它的速度、效率和易用性,你會更喜歡 PyTorch。 PyTorch 包含定制的 GPU 分配器,這使得深度學習模型具有更高的內(nèi)存效率。 由此,訓練大型深度學習模型變得更容易。 因此,Pytorch 在 Facebook、Twitter、Salesforce 等大型組織廣受歡迎。
用 PyTorch 和 TensorFlow 訓練深度學習模型
PyTorch 和 TensorFlow 都可以用來建立和訓練神經(jīng)網(wǎng)絡(luò)模型。
TensorFlow 工作于 SCG(靜態(tài)計算圖)上,包括在模型開始執(zhí)行之前定義靜態(tài)圖。 但是,一旦開始執(zhí)行,在模型內(nèi)的調(diào)整更改的唯一方法是使用 tf.session and tf.placeholder tensors。
PyTorch 非常適合訓練 RNN(遞歸神經(jīng)網(wǎng)絡(luò)),因為它們在 PyTorch 中比在 TensorFlow 中運行得更快。 它適用于 DCG(動態(tài)計算圖),可以隨時在模型中定義和更改。 在 DCG 中,每個模塊可以單獨調(diào)試,這使得神經(jīng)網(wǎng)絡(luò)的訓練更簡單。
TensorFlow 最近提出了 TensorFlow Fold,這是一個旨在創(chuàng)建 TensorFlow 模型的庫,用于處理結(jié)構(gòu)化數(shù)據(jù)。 像 PyTorch 一樣,它實現(xiàn)了 DCG,在 CPU 上提供高達 10 倍的計算速度,在 GPU 上提供超過 100 倍的計算速度! 在 Dynamic Batching 的幫助下,你現(xiàn)在可以執(zhí)行尺寸和結(jié)構(gòu)都不相同的深度學習模型。
GPU 和 CPU 優(yōu)化的比較
TensorFlow 的編譯時間比 PyTorch 短,為構(gòu)建真實世界的應用程序提供了靈活性。 它可以從 CPU、GPU、TPU、移動設(shè)備到 Raspberry Pi(物聯(lián)網(wǎng)設(shè)備)等各種處理器上運行。
另一方面,PyTorch 包括張量計算,可以使用 GPU 將深度神經(jīng)網(wǎng)絡(luò)模型加速到 50 倍或更多。 這些張量可以停留在 CPU 或 GPU 上。 CPU 和 GPU 都是獨立的庫, 無論神經(jīng)網(wǎng)絡(luò)大小如何,PyTorch 都可以高效地利用。
社區(qū)支持
TensorFlow 是當今***的深度學習框架之一,由此也給它帶來了龐大的社區(qū)支持。 它有很好的文檔和一套詳細的在線教程。 TensorFlow 還包括許多預先訓練過的模型,這些模型托管和提供于 GitHub。 這些模型提供給熱衷于使用 TensorFlow 開發(fā)者和研究人員一些現(xiàn)成的材料來節(jié)省他們的時間和精力。
另一方面,PyTorch 的社區(qū)相對較小,因為它最近才發(fā)展起來。 與 TensorFlow 相比,文檔并不是很好,代碼也不是很容易獲得。 然而,PyTorch 確實允許個人與他人分享他們的預訓練模型。
PyTorch 和 TensorFlow —— 力量懸殊的故事
就目前而言,由于各種原因,TensorFlow 顯然比 PyTorch 更受青睞。
TensorFlow 很大,經(jīng)驗豐富,最適合實際應用。 是大多數(shù)機器學習和深度學習專家明顯的選擇,因為它提供了大量的功能,最重要的是它在市場上的成熟應用。 它具有更好的社區(qū)支持以及多語言 API 可用。 它有一個很好的文檔庫,由于從準備到使用的代碼使之易于生產(chǎn)。 因此,它更適合想要開始深度學習的人,或者希望開發(fā)深度學習模型的組織。
雖然 PyTorch 相對較新,社區(qū)較小,但它速度快,效率高。 總之,它給你所有的優(yōu)勢在于 Python 的有用性和易用性。 由于其效率和速度,對于基于研究的小型項目來說,這是一個很好的選擇。 如前所述,F(xiàn)acebook、Twitter 等公司正在使用 PyTorch 來訓練深度學習模型。 但是,使用它尚未成為主流。 PyTorch 的潛力是顯而易見的,但它還沒有準備好去挑戰(zhàn)這個 TensorFlow 野獸。 然而,考慮到它的增長,PyTorch 進一步優(yōu)化并提供更多功能的日子并不遙遠,直到與 TensorFlow可以 比較。















 
 
 






 
 
 
 