0202-pytorch和tensorflow的區別


0202-pytorch和tensorflow的區別

pytorch完整教程目錄:https://www.cnblogs.com/nickchen121/p/14662511.html

一、引言

在這里,我們長話短說,短話簡說,抱歉,還是說了這么多廢話,兩年多沒有正式寫技術博客了,有點興奮又有點傷感,那就正式開始吧。

話說在某某年有人發明了人工智能這個專業術語,因此后來者想要達到這個人說的人工智能的那種狀態。當然了,你可以把人工智能弱智的理解成機器人這種啦,當然咯,目前這還是很難實現的,我們就說兩個現在大多數人都用得到的吧。

這兩個東西就是你們手機的siri、小冰、小白、小度啥的,扯一下,為什么都要加個“小”字,就不能是大白嗎?也挺親切的。好了,言歸正傳,上述的小某某其實專業點講就是語音助手,它用到的是人工智能中自然語言處理這個技術,也就是大白話的語音識別,說的再清楚點,就是你說啥,機器都能聽懂,還能做出回應。比如你說:有德是最帥的嗎?毫無疑問,它們的回復都是:是的。可惜它們不是她們。除了這些所謂的語音助手,還有一個就是人臉識別,無論是你的高檔某某保時捷牌手機,還是在高鐵口,我們都可以通過刷臉進行一定的操作,其實簡單點說,人臉識別就是努力讓機器人認識你,當然咯,這種人臉識別技術更多的是對比技術,還沒有那么高端。總而言之,你只要知道,人工智能這玩意兒已經離你的生過特別近了,它並不遙遠。如果你還想了解更多,我給你說幾個高端但還沒怎么落地的應用,基因測序、醫療影像、無人駕駛,其它的一時半會也想不出來,就這樣吧!

二、pytorch和tensorflow的功能

上面為什么要說那么多呢?也許就是我想說點廢話,其實不然,說了那么多,就是想告訴大家人工智能是一個很高端的東西。而這種高端的東西只是看起來很高端,為什么這樣講呢,因為如果你不去了解,你可能認為你需要去了解各種各樣類型的知識呢,比如:哲學、數學、經濟學、神經科學、心理學、計算機工程、控制論、語言學。(此八種來自《人工智能——一種現代的方法》,南京大學AI學院研究生初試的一本書)對的,就是這么恐怖,所以很多人可能“直接推,放棄”。

但是人工智能真的只是表面看起來高端,如果你有一定的毅力,你是可以很好地去實現它的,因為上述八種類型的學科想要實現的是一種還遠在天邊的通用人工智能,此時你可以把它理解成一個和人一樣的機器人。而我們的目標僅僅只是需要做一個會下圍棋的人工智能,對的,就是那個曾經紅紅火火的alphago,我造個這玩意還需要考慮啥哲學、心理學嗎?還不至於。

那么重點來了,為了造一個如alphago一樣的人工智能,我們需要干嘛呢?其實很簡單:

  1. 自己買本深度學習的書看看,現在市面上一大堆這樣的書,別問我看哪本,市面上的深度學習的書其實差不多都是五十步笑百步,所以哪一本都行。
  2. 大概看完這本書后,開始敲代碼就行。

我們的主人公pytorch和tensorflow終於要出場了,他們在幕后可愁死了,至於keras、caffe這種就別問了,他們可能一直都要在我的幕后做冷板凳,21世紀了,誰還用這些,你用我不用。下面pytorch簡稱torch,tensorflow簡稱tf,別問我為什么,就是想少打幾個字,打字很累的。也就是說torch和tf的功能是干啥呢?他們的功能很簡單,就是為了完成上面說的第二步,也就是方便我們敲代碼。

為什么說他能方便我們敲代碼呢?舉個很簡單的例子,比如我現在有一個極其復雜的函數:

\[z = ax^2+bx+clnx+dy^3+ey+\epsilon \]

好吧,其實並不復雜,但是如果我們需要對x和y求偏導,動筆一算,結果為\(\frac{\partial{z}}{\partial{y}}=3d^2+e\),x的偏導我還需要動筆一算,總感覺很麻煩的感覺,但是如果我們用了torch這個玩意兒,tf同理,這樣就行了,x和y的一次性求出來:

from torch import autograd

z2x_grad, z2y_grad = autograd.grad(z, [x, y]) # z對x求偏導,z對y求偏導

好了,就透露這么多。對了,別運行這段代碼,運行報錯,還有一些定義變量啥的代碼沒寫出來,但這已經夠打動你了吧?

復雜點說吧,torch和tf有啥用呢,可以讓你把一些看起來高深莫測的東西,幾行代碼解決。其實就是it屆廣為流傳的一句話:面試造航母,工作擰螺絲。為什么說工作擰螺絲呢?就拿我從事過的Python后端開發來說吧!Python后端開發中有一個和tf一樣的東西,叫做Django,也是個框架,只要你用它做開發,擰螺絲就行了。為什么說擰螺絲呢?因為無論是torch,還是tf,還是Django,他們幫我們把各種輪子造好了,比如上述求偏導,我們不需要求偏導是什么,如何求偏導,我們只要知道我們要去求偏導的時候,autograd.grad一下,然后填幾個參數就行。

簡單點說吧,torch和tf有啥呢?就是他們屬於一個成型的框架系統,里面封裝了各種各樣的輪子,你只要會一些他們的基本使用方法,便可以使用這個輪子完成那些高深莫測的東西,比如造航母,其實也不是不行,哈哈!

三、torch和tf的區別

上面說到了torch和tf的功能,就是他們作為一個合格的框架系統,在這個系統里面,他們提供了各種各樣的輪子給我們造航母。但是他們既然都有同樣的功能,那我該用哪個呢?實話實說,最好的方法,兩個都學,但是不是兩個都精通。

比如我以前作為Python講師給學生們上課的時候,Python后端開發有三個比較有名的框架,分別是Django、Flask、Tornado,我們主講Django,其他的你說要不要學,要學,他們是副學,至少要能簡單使用。為什么這樣呢?因為三個框架各有好壞,每個公司的項目需求和CTO們的喜好又不同,你怎么知道他喜歡用哪個。但是一通百通,既然三者都是為了完成一件事,那么他們的本質區別不會很大,所以主學 一個,其他的深入一下也可信手拈來。

好了,言歸正傳,也就是說torch和tf我們都要學,但要有主次,至於哪個主哪個次,我給你說出優劣,你自己抉擇。不過成人才做選擇,我作為一個小孩子我全都要,那怕是要累死我。

3.1 torch

那我們先說說torch吧!因為不久之后我可能需要使用他,所以我需要先學這個,我也就先講講這個。torch它有啥優點呢!它的優點其實目前我發現就兩個個,簡單和靈活,對的,簡單和靈活。缺點,有啥缺點,目前也沒啥缺點,你要說幾年前吧,用的人少,社區少,這樣你碰到了問題要么找“鬼”,要么自己慢慢鑽研吧!但是現在他挺火爆的,不亞於tf。

缺點你要說有,還真有,在他不火爆的時候,tf1.0挺火爆的,導致剛開始工業界大興土木都是用的tf,你要知道,我100萬行的代碼用的是tf,就因為你torch簡單我就換個100萬代碼?你以為你是誰。但是,隨着時間的發展,這樣的問題已經沒了。就好比Python2和Python3一樣,現在誰還用Python2,怕是遠古企業才用吧。然而我以后要搞三年學術,那個缺點對我來說也不是啥缺點。

總結下,torch這東西簡單而且靈活,但是由於工業界早期使用tf,不可能因為你簡單我就換torch。所以,如果你是為了工作,最好提前打聽清楚,如果你是搞學術研究,也別急着做定論,畢竟tf2.0出來了,也可以看看下面tf的介紹。

3.2 tf

Tf它說起來就一言難盡了,但是我也要長話短說,現在20:30,我有個21點的鬧鍾要去睡覺,我得趕進度,哈哈!其實不是,只是我們重點講tf2.0就沒必要說那么多了。

tf它很特別,它得區分tf1.0和tf2.0版本,如果它沒有2.0版本,那么我認為“如無必要,勿增實體”,什么意思,選簡單的,哪個簡單,torch簡單呀。當然咯,公司、研究室有規定,那就選tf1.0咯。我都能想到,那么其他開發者怎么想不到,所以當torch出來的時候,tf1.0的使用人數一直下滑,那個恐怖程度,看下圖(終於有圖片了):

不用我多說了吧,tf那一段黑暗的時光,就是它驕傲自滿,和以前的我一樣,所以我得了干眼症,它,你懂得。

但是很多人好奇為什么tf的使用人數為什么又增多了呢?這里,不得不說,以前是tf的金主爸爸google驕傲自滿,后面就是torch的金主爸爸facebook不僅要獲取用戶隱私,還非要泄露用戶隱私,搞得facebook總公司雞犬不寧,更何況他的小兒子。而此時的tf也爭了口氣,洗心革面出了tf2.0版本,也因此tf1.0版本靜態計算(不懂就算了),用個輪子都麻煩死的缺點沒了。人生就是這樣啊!哈哈哈,不自然的來句雞湯。

因為tf2.0版本出來了,大家都好奇唄,其實就是變簡單的了,它驕傲自滿的缺點還沒有徹底改變,用起來稍微還是比torch復雜一點的,但總歸是五十步笑百步了。

3.4 Torch和tf到底用哪個

說了這么多,感覺還是不清楚用哪個。其實,很簡單,現在你的問題就是到了是該去淘寶還是去京東網上shopping。至於去哪個,給幾個參考:

  1. torch和tf兩者的生態是不一樣的,也就是兩者提供的輪子是有區別的,如果你要用到tf的輪子,那你就去tf,反之,torch。
  2. torch和tf的服務態度是不一樣的,網上說torch的服務態度好,我也沒試過,我不清楚,但是沒人說tf的服務態度好。
  3. torch不僅服務態度好,提供的文檔和api也很整齊,和我一樣,愛整理東西,哈哈,寫個文章都要吹噓自己,而tf貌似文檔和api很亂。
  4. tf線上部署友好,方便運維和開發了,不過torch也開始迎面而上了。

說了這么多,還是不清楚用哪個呀!那我就說說我吧!由於我未來馬上需要用到torch,那么我一定是先學torch的。但是你說我tf要不要學,我也是要學的,只不過會未來再學。

如果你先學torch也行,先學tf也行,那么對於這種五十步和一百步區別的東西,告訴你一個最簡單也最好用的方法,拋硬幣!貌似拋硬幣才是這篇文章的核心內容,但是如果我一來就說拋硬幣,你怕是會說我,這個人腦子瓦特(傻)了吧!

四、總結

本篇文章正式介紹了torch和tf的區別,廢話那么多,相信你已經很明白兩者的區別了,不過是五十步笑百步,先學哪個按照你的需求來就行,但是無論你第一個選擇了哪個,另外一個都要作為你的備胎,兩個都要學,只不過一個主,一個次。

如果兩者對你來說都可以先學,那么,我也教了你一個簡單的方法,拋硬幣!

五、推薦

接下來的所有文章均來自於個人學習時期的總結,為了防止有人誤解,給出學習課程的名字和鏈接,不要找我要免費的視頻鏈接,雖然百度是個好東西,但是推薦支持原創,可以通過以下鏈接購買課程:

  1. tf2.0:

  2. pytorch:

  3. 參考書籍:《深度學習框架-pytroch入門與實踐》 - 陳雲、《pytorch深度學習入門》 - 曾芃(peng)壹、《tensorflow深度學習-深入理解人工智能算法設計》 - 龍良曲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM