首先PyTorch本質(zhì)上是Numpy的替代者,而且支持GPU、帶有高級(jí)功能,可以用來(lái)搭建和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)。如果你熟悉Numpy、Python以及常見的深度學(xué)習(xí)概念(卷積層、循環(huán)層、SGD等),會(huì)非常容易上手PyTorch。而TensorFlow可以看成是一個(gè)嵌入Python的編程語(yǔ)言。你寫的TensorFlow代碼會(huì)被Python編譯成一張圖,然后由TensorFlow執(zhí)行引擎運(yùn)行。 一、全面性 隨著PyTorch逐漸成熟,我預(yù)計(jì)這部分的差距會(huì)趨近于零。但目前,TensorFlow還是有一些PyTorch不支持的功能。它們是: 沿維翻轉(zhuǎn)張量(np.flip, np.flipud, np.fliplr)檢查無(wú)窮與非數(shù)值張量(np.is_nan, np.is_inf)快速傅里葉變換(np.fft) 這些TensorFlow都支持。另外,TensorFlow的contrib軟件包中,有更多PyTorch沒有的高級(jí)功能和模型。 二、序列化 兩種框架下保存和加載模型都很簡(jiǎn)單。PyTorch有一個(gè)特別簡(jiǎn)單的API,可以保存模型的所有權(quán)重或pickle整個(gè)類。TensorFlow的Saver對(duì)象也很易用,而且為檢查提供了更多的選項(xiàng)。 TensorFlow序列化的主要優(yōu)點(diǎn)是可以將整個(gè)圖保存為protocol buffer。包括參數(shù)和操作。然而圖還能被加載進(jìn)其他支持的語(yǔ)言(C++、Java)。這對(duì)于部署堆棧至關(guān)重要。理論上,當(dāng)你想改動(dòng)模型源代碼但仍希望運(yùn)行舊模型時(shí)非常有用。 PyTorch不僅僅是定義網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單,而且還很直觀靈活。靜態(tài)圖的網(wǎng)絡(luò)定義都是聲明式的,而動(dòng)態(tài)圖可以隨意地調(diào)用函數(shù)(if,for,list什么的隨便用),兩者的差距不是一點(diǎn)點(diǎn)。網(wǎng)絡(luò)的定義在任何框架中都應(yīng)該是屬于最基礎(chǔ)最簡(jiǎn)單的一個(gè)內(nèi)容,即使是接口繁多的tensorflow,通過不斷的查文檔,新手也能把模型搭起來(lái)或者是看懂別人的模型。 三、強(qiáng)大的社區(qū) facebook的FAIR強(qiáng)力支持,F(xiàn)AIR是全球TOP3的AI研究機(jī)構(gòu)。PyTorch論壇,文檔,tutorial,一應(yīng)俱全。FAIR的幾位工程師更是全職維護(hù)開發(fā),github上PyTorch每天都有許多pull request和討論。 很難聽到有誰(shuí)說TF好用,最多是諸如谷歌支持,社區(qū)強(qiáng)大,文檔完善,功能齊全等等。但是PyTorch你只要深度用過一段時(shí)間,就會(huì)喜歡上它的。很多人自來(lái)水安利PyTorch,當(dāng)然不是facebook給錢,或者是博得多少點(diǎn)擊量,真的是因?yàn)樗糜昧恕?/p> 四、簡(jiǎn)潔易懂的代碼 一個(gè)框架你不懂源碼,你就不能完全掌握它的運(yùn)行原理,像tensorflow的`sess.run`簡(jiǎn)直就是個(gè)黑箱。而PyTorch幾乎是我用過框架中源碼最易懂的,任何一個(gè)操作,不論多么高級(jí)復(fù)雜,都能輕松的找到它對(duì)應(yīng)tensor操作(Caffe/tinydnn也挺簡(jiǎn)潔的) 五、自定義擴(kuò)展 兩個(gè)框架都可以構(gòu)建和綁定用C、C++、CUDA編寫的自定義擴(kuò)展。TensorFlow仍然需要更多的樣板代碼,盡管這對(duì)于支持多類型和設(shè)備可能更好。在PyTorch中,你只需為每個(gè)CPU和GPU編寫一個(gè)接口和相應(yīng)的實(shí)現(xiàn)。兩個(gè)框架中編譯擴(kuò)展也是直接記性,并不需要在pip安裝的內(nèi)容之外下載任何頭文件或者源代碼。 |
|
來(lái)自: gaolidabangzi > 《python》