DL:深度學(xué)習(xí)框架Pytorch、 Tensorflow各種角度對(duì)比
???????
相關(guān)文章
DL:深度學(xué)習(xí)框架Pytorch、 Tensorflow各種角度對(duì)比
DL:深度學(xué)習(xí)框架Pytorch、 Tensorflow各種角度對(duì)比——案例代碼實(shí)現(xiàn)
DL框架之PyTorch:PyTorch的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略
DL框架之Tensorflow:Tensorflow的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略
DL:深度學(xué)習(xí)框架Pytorch、 Tensorflow各種角度對(duì)比——案例代碼實(shí)現(xiàn)
? ? ? ? ?兩種框架都在張量上運(yùn)行,把任何模型都看作一個(gè)有向非循環(huán)圖(DAG),但對(duì)于如何定義它們,PyTorch 和 TensorFlow 區(qū)別很大。
? ? ? ? ?TensorFlow 遵循“數(shù)據(jù)即是代碼,代碼就是數(shù)據(jù)”的理念。在 TensorFlow 中,在跑模型之前會(huì)靜態(tài)的定義圖形。和外界的所有聯(lián)系都是通過(guò) tf.Session 對(duì)象和 tf.Placeholder,它們都是會(huì)在模型運(yùn)行被外部數(shù)據(jù)取代的張量。
? ? ? ? ?在 PyTorch 中,會(huì)更動(dòng)態(tài)一些:你可以隨著進(jìn)展定義、更改和執(zhí)行節(jié)點(diǎn),沒(méi)有特殊的會(huì)話(huà)界面或占位符。
? ? ? ? ?整體來(lái)看,PyTorch 和 Python 結(jié)合的更緊湊些,多數(shù)時(shí)候會(huì)感覺(jué)更原生。而在 TensorFlow 里寫(xiě)東西時(shí),有時(shí)你會(huì)覺(jué)得你的模型好像躲在一堵墻后面一樣,就通過(guò)墻上的幾個(gè)洞洞跟你交流。當(dāng)然了,這也看每個(gè)人的喜好和品味。?PyTorch 更適用于研究、愛(ài)好者和小規(guī)模項(xiàng)目的快速原型開(kāi)發(fā)。TensorFlow 更適合大規(guī)模部署,尤其是涉及跨平臺(tái)和嵌入式部署時(shí)。
? ? ? ?PyTorch 開(kāi)始會(huì)看起來(lái)很像一個(gè)框架。回想一下,編程框架會(huì)在特定領(lǐng)域?yàn)槲覀?span style="color:#f33b45;">提供有用的抽象,用它們可以很方便的解決具體問(wèn)題。而這是框架和庫(kù)的的本質(zhì)區(qū)別之處。
(3)、TensorFlow上手需學(xué)習(xí)額外概念—會(huì)話(huà)、圖、變量范圍、占位符:可以將 TensorFlow 看作是一種嵌入 Python 的編程語(yǔ)言。當(dāng)你編寫(xiě) TensorFlow 代碼時(shí),它會(huì)被 Python編譯成圖(graph),然后由 TensorFlow 執(zhí)行引擎運(yùn)行。
? ? 1)、所以,TensorFlow 還有一些需要額外學(xué)習(xí)的概念,比如會(huì)話(huà)(session)、圖、變量范圍、占位符。要讓基本的模型跑起來(lái)也需要更多樣板代碼。上手 TensorFlow 的時(shí)間肯定會(huì)比 PyTorch 長(zhǎng)。
(4)、TensorFlow的序列化更強(qiáng)大:TensorFlow 的 Saver 對(duì)象也很容易使用,而且也為檢查點(diǎn)提供了更多選擇。TensorFlow 在序列化方面的主要優(yōu)勢(shì)是整個(gè)計(jì)算圖都可以保存為 protocol buffer。這既包括參數(shù),也包括運(yùn)算。然后這個(gè)圖可以用其它支持的語(yǔ)言(C++、Java)加載。對(duì)于不支持 Python 的部署環(huán)境來(lái)說(shuō),這是非常重要的功能。而且理論上,這個(gè)功能也可以在你修改模型的源代碼,但又想運(yùn)行舊模型時(shí)為你提供幫助。
(5)、TensorFlow 支持移動(dòng)和嵌入式部署:但是在 TensorFlow 上,要將模型部署到安卓或 iOS 上需要不小的工作量,但至少你不必使用 Java 或 C++ 重寫(xiě)你模型的整個(gè)推理部分。
? ?1)、對(duì)于高性能服務(wù)器上的部署,還有 TensorFlow Serving 可用。除了性能方面的優(yōu)勢(shì),TensorFlow Serving 的另一個(gè)重要特性是無(wú)需中斷服務(wù),就能實(shí)現(xiàn)模型的熱插拔。
(6)、TensorFlow 的數(shù)據(jù)加載 比較復(fù)雜:我還沒(méi)找到 TensorFlow 的非常有用的數(shù)據(jù)加載工具(讀取器、隊(duì)列、隊(duì)列運(yùn)行器等等)。部分原因是要將你想并行運(yùn)行的所有預(yù)處理代碼加入到 TensorFlow 圖中并不總是那么簡(jiǎn)單直接(比如計(jì)算頻譜圖)。另外,TensorFlow 的 API 本身也更加冗長(zhǎng),學(xué)習(xí)起來(lái)也更難。
(7)、TensorFlow 的設(shè)備管理默認(rèn)即可:設(shè)備管理的無(wú)縫性能非常好,通常你不需要指定任何東西,因?yàn)槟J(rèn)的設(shè)置就很好。比如說(shuō),TensorFlow 假設(shè)如果存在可用的 GPU,你就希望在 GPU 上運(yùn)行。
? ? 1)、TensorFlow 設(shè)備管理的唯一缺陷是它會(huì)默認(rèn)占用所有可用的 GPU 上的所有內(nèi)存,即使真正用到的只有其中一個(gè)。但也有一種簡(jiǎn)單的解決方案,就是指定 CUDA_VISIBLE_DEVICES。有時(shí)候人們會(huì)忘記這一點(diǎn),就會(huì)讓 GPU 看起來(lái)很繁忙,盡管實(shí)際上它們啥也沒(méi)干。
(8)、TensorFlow的強(qiáng)大的可視化工具TensorBoard:TensorBoard 是一個(gè)用于可視化訓(xùn)練機(jī)器學(xué)習(xí)模型各個(gè)方面的工具。它是 TensorFlow 項(xiàng)目產(chǎn)出的最有用的功能之一。僅需在訓(xùn)練腳本中加入少許代碼,你就可以查看任何模型的訓(xùn)練曲線(xiàn)和驗(yàn)證結(jié)果。TensorBoard 作為一個(gè)網(wǎng)頁(yè)服務(wù)運(yùn)行,可以尤其方便地可視化存儲(chǔ)在 headless 節(jié)點(diǎn)上的結(jié)果。
? ?1)、展示模型圖形、繪制標(biāo)量變量、可視化分布和直方圖、可視化圖形 ?播放音頻
(9)、TensorFlow持支持分布式執(zhí)行、支持大規(guī)模分布式訓(xùn)練:在GPU的分布式計(jì)算上更為出色,在數(shù)據(jù)量巨大時(shí)效率比pytorch要高一些。
? ? ? ?TensorFlow 給人的感覺(jué)更像是一個(gè)庫(kù),而非一個(gè)框架:所有的操作都為低階操作,你需要寫(xiě)很多樣板代碼,即便你可能并不想寫(xiě)(比如,一遍又一遍的定義方差和權(quán)重···)。
(4)、PyTorch序列化的API比較簡(jiǎn)單:在這兩種框架中,保存和加載模型都很簡(jiǎn)單。PyTorch 有一個(gè)非常簡(jiǎn)單的 API,既可以保存模型的所有權(quán)重,也可以 pickle(加工)整個(gè)類(lèi)。
(5)、PyTorch不支持移動(dòng)和嵌入式部署:而包括 PyTorch 在內(nèi)的很多深度學(xué)習(xí)框架都沒(méi)有這個(gè)能力。
(6)、PyTorch的數(shù)據(jù)加載 API 設(shè)計(jì)得很好:數(shù)據(jù)集、采樣器和數(shù)據(jù)加載器的接口都是特定的。數(shù)據(jù)加載器可以接收一個(gè)數(shù)據(jù)集和一個(gè)采樣器,并根據(jù)該采樣器的調(diào)度得出數(shù)據(jù)集上的一個(gè)迭代器(iterator)。并行化數(shù)據(jù)加載很簡(jiǎn)單,只需為數(shù)據(jù)加載器傳遞一個(gè) num_workers 參數(shù)即可。
(7)、PyTorch 的設(shè)備管理必須指定:而在 PyTorch 中,你必須在啟用了 CUDA 之后明確地將所有東西移到 GPU 上。
(8)、PyTorch 的可視化只能調(diào)用matplotlib 、seaborn???????等庫(kù):目前 PyTorch 并沒(méi)有可以和 Tensorboard 匹敵的工具,不過(guò)倒是存在一些集成功能。雖然也能用一些繪圖工具比如 matplotlib 和 seaborn
(9)、PyTorch 支持支持分布式執(zhí)行、暫時(shí)不支持分布式訓(xùn)練:
聯(lián)系客服