01_pytorch和tensorflow的區別

二十三歲的有德發表於2021-04-13

Pytorch和TensorFlow的區別

引言

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

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

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

pytorch和tensorflow的功能

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

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

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

  1. 自己買本深度學習的書看看,現在市面上一大堆這樣的書,別問我看哪本,市面上的深度學習的書其實差不多都是五十步笑百步,所以哪一本都行。
  2. 大概看完這本書後,學個Python,Python網課和文件我都給你整理好了,連結在此:https://www.cnblogs.com/nickchen121/p/10718112.html
  3. 然後開始敲程式碼就行。

我們的主人公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我們都要學,但要有主次,至於哪個主哪個次,我給你說出優劣,你自己抉擇。不過成人才做選擇,我作為一個小孩子我全都要,那怕是要累死我。

torch

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

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

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

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複雜一點的,但總歸是五十步笑百步了。

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的區別,廢話那麼多,相信你已經很明白兩者的區別了,不過是五十步笑百步,先學哪個按照你的需求來就行,但是無論你第一個選擇了哪個,另外一個都要作為你的備胎,兩個都要學,只不過一個主,一個次。

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