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