如何高效的學習 TensorFlow 代碼? 或者如何掌握TensorFlow,應用到任何領域?
鏈接:https://www.zhihu.com/question/41667903/answer/109611087
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
有同學反應資源太多不知道從何看起,或者有點基礎了想快速上手,因此就直接把幾個比較好的教程放在這里,后面的內容作為參考。
- Stanford的CS 20SI課程,專門針對TensorFlow的課程,Tensorflow for Deep Learning Research
- 兩本書籍:TensorFlow Machine Learning Cookbook以及TensorFlow for Machine Intelligence,這兩本網絡均有pdf版本,請自行搜索。
- Udacity公開課,深度學習
有些技術(網絡方面)在知乎是不適合公開討論的,因此還是要貼上自己這篇博客的鏈接:新手向的TensorFlow學習之路2(Learning paths 2)
前言:其實TensorFlow本身僅僅是一個分布式的高性能計算框架,想要用TF做深度學習,僅僅學習這個框架本身是沒有太大意義的。因此應該將TF看作技術路線中的一個核心點,去掌握整個開發所需要的必要技術,知識。尤其是深度學習的基本原理,這對日后搭建模型,模型調參以至提出新的模型都是極其有用的。
第一篇學習之路寫於2016年6月份,時過境遷,特別是深度學習這個日新月異的領域,隔了那么久,不得不說已經有些過時了,並且隨着學習的深入,越發覺得之前的學習之路過於籠統,加之TensorFlow發布了1.0正式版,因此整理一下,再次寫一篇。這次在內容的結構上將會大體分為三種,首先是公共基礎部分,這個無需多解釋。另外,一個是偏向應用性質的快節奏(fast peace),針對不想也沒必要深入了解理論知識希望盡快應用的人群,另一種是偏向研究性質的人群(hard way),針對例如研究生之類希望深入理論知識的人群。當然,hard way的前提是fast peace。但是寫法上,並沒有分別寫,因為某種意義上這兩種是相互包含的,分開寫會顯得冗長與重復,因此采用粗體標記提示特定部分是屬於哪一種。
1. 穩定的網絡【公共基礎】:這是個不是技術的技術,TensorFlow畢竟出自Google,官方文檔訪問不是很穩定。
2. Github【公共基礎】:這是個開源程序的網站,Linux內核在這個網站也有鏡像。Github的核心是Git,一種版本控制系統,已經逐漸取代SVN。這個網站托管了很多高質量的或者說世界頂尖的開源項目,比如TensorFlow。學習一下這個網站如何使用,注冊個賬號,學習一下Git的使用方法。這個網站有自己的tutorial和guide。而且后期自己的項目管理多半也會用到git,所以,早點學習肯定是有好處的。
【fast peace(即簡略的快節奏教程,下同)】:
1. Git 參考手冊(推薦)
【hard way(即大而全的完整或者正式教程,下同)】:
3. Git Tutorial
3. Python【公共基礎】:這是一種非常流行的腳本語言,龐大的第三方庫可以快速寫出短小容易理解的代碼,而且也是TensorFlow的推薦開發語言。不僅僅是對於TensorFlow這門語言很重要,對於整個機器學習,應用層面放眼望去基本就是Python與R的天下了,而R更偏向與統計學領域,深度學習Python簡直是紅透了半邊天,當然我是針對初學者,如果已經掌握了其他語言,例如Java,C++,那么其實理論上而言可以不用掌握Python,選擇自己熟悉的語言的API即可。但是對於TensorFlow,只有Python的API最全面,文檔社區也最完善(截至2017年3月),當然隨着TensorFlow的發展都會完善,可是現在就要用呀:)。而且,最重要的是,對於已經掌握其他語言的人來說,學習Python不會花費太久的。並且,Pytohn寫起來短小精悍,易於理解,很適合這種用來搭架子調用框架而且不怎么需要考慮效率的場景(一般來講,最需要效率的部分框架會用C++實現,Python僅僅是作為頂層去調用)。另外,推薦學習Python3,這才是Python的未來,2.7的支持在2020年會停止。而且,后面會知道的,對於Python2.7向3的支持很多情況僅僅是import幾個future包。
【fast peace】:
1. Tutorial – Learn Python in 10 minutes
【hard way】:
1. 廖雪峰的Python教程
4. Linux【公共基礎】:TensorFlow的主要運行平台之一就是Linux,但是正式版對Windows的支持日趨完善,真的沒時間學習Linux平台可以先在Windows上運行TensorFlow。不過,學習Linux真的用不了多久(當然是指做開發環境日常日用,立志做系統管理員還是要下一番功夫的)。推薦Ubuntu 16.04 LTS,這不僅是“新手友好”的發行版,也是Google很多產品的官方支持版本,官方支持就會帶來很多便捷以及少一些”坑“。LTS(長期支持版本)的加成保證了系統的穩定(穩定不僅指運行穩定,更是指軟件環境,例如python不會突然默認變成3.6,gcc不會突然就默認變成6,插一句,之所以這么說,是因為以前用的是Arch,裝了TensorFlow一直跑的很開心,直到有天突然發現跑不起來了,原來是Arch升級了一下Python的默認版本變成了3.6了XD。)
【fast peace】:
1. 我的知乎回答
【hard way】:
1. UNIX Tutorial for Beginners
3. Linux工具快速教程
5. 深度學習–概念與基礎:
【fast peace】(偏向概念介紹,introduction):
1. 深度學習wiki
【hard way】(偏向概念解釋,數學推導,基本原理):
兩本經典中的經典書籍:第一本傾向於理論闡述,第二本則是傾向於直觀解釋。
2. Neural Networks and Deep Learning
第三本則是代碼應用向的,使用Theano從零搭建各種常見的網絡結構,雖然是Theano,但是基本思想是統一的。
6. Python常用科學計算庫【公共基礎】:
1. Numpy
2. Sklearn
3. Matplotlib
4. Pandas
雖然說是公共基礎部分,但是系統學習這幾個庫,也不是一件容易的事,而且很耗時間。因此還是遵循夠用即可的原則。但是還是想列在這里,因為后來發現如果這幾個庫掌握的比較熟練,數據預處理后處理都能極大地節省時間,當你還在苦苦想如何設計預處理方法的時候,其實去查一查手冊,大概率在這幾個庫里已經寫好了。這幾個庫的官方文檔都很優秀,比如Pandas的10 Minutes to pandas。因此,閑余時間多看看官方tutorial即可。
7. TensorFlow:
【fast peace】(偏向應用性質,到手即用,pretrained-models,tflearn,keras等):
1. TensorFlow的白皮書,對TensorFlow的整體有個把握或者說印象是很有必要的,對后期的“圖編程”,優化,都很有啟發。
2. TFLearn,基於TensorFlow的高級API,不需要了解太多細節,應用向的可以直接看這個。
3. TFSlim,基於TensorFlow的高級API,和TensorFlow契合度更好。
4. Keras,高級API,后端可以使用TensorFlow(默認)
【hard way】(偏向理論性質,調用基本API手寫,自定義layer,自定義kernel,自定義optimizer等):
- 官網教程,Get Start,Programmer’s guide,Tutorials,Performance過一遍。
- Google的Udacity課程
- Stanford的CS20SI課程
8. 論文閱讀路線圖【hard way】: github上有個很有名的Deep Learning papers reading roadmap,已經過萬stars,從事深度學習科研者的必讀清單,在我寫的上一篇學習之路中,雖然整理了很多論文,但是過於雜亂,在此就不做引用啦。
9. 相關博客等其他資源:
- 先放上我的博客啦(笑)
- Beginner-level tutorials for a powerful framework
- CS231n: Convolutional Neural Networks for Visual Recognition
- CS224n: Natural Language Processing with Deep Learning
- UFLDL Tutorial
- UFLDL教程(上面UFLDL Tutorial舊版,但是是中文的)
- First Contact With TensorFlow
- Deep Learning
- Deep Learning For Coders-36 hours of lessons for free(一個不錯的視頻教程)
- colah’s blog(推薦,寫了很多晦澀概念可視化的博客)
- DeepLearning4J(雖然是一個面向Java的深度學習框架,但是文檔很好,通用性也很強)
- Chris McCormick · Machine Learning Tutorials and Insights(這個和下面的幾個都是不錯的博客,推薦關注)
- Daniil's blog
- Café, bonne nuit
- Hackery, Math & Design
10. 不錯的資源類網站:
---------------------------------舊答案的分割線---------------------------------
已更新。
發一波預告~最近剛用tensorflow搞完一個算是接近實際並且帶有移動端應用外加inception retrain的項目,打算考試結束更新一波~:)
TensorFlow已經發布1.0版本!
已更新。
近期更新計划:
1.重新整理Learning path,將各個部分更加詳盡闡述,同時給出合適的快速入手教程。
2.及時跟進最新進展,刪除陳舊信息。
我在blog中總結了學習路線,針對新手。
新手向的Tensorflow學習之路(Learning paths)
文中的教程或者blog以及論文書籍基本上都是經典,推薦入門學習。
貼在這里:
在學習Tensorflow的過程中磕磕碰碰,總結一些個人心得記錄於此,志同道合之友共勉~~
1.穩定的網絡:Tensorflow畢竟出自Google,官方文檔訪問不是很穩定。而且一般來說,對於英文的文檔,資料和疑問,Google搜索的結果要比Baidu好很多。(不是偏見,是各有所長,天氣地圖電影啥的,百度還是做的很好的)
2.Github:這是個開源程序的網站,Linux內核就在這個網站托管。Github的核心是Git,一種版本控制系統,已經逐漸取代SVN。這個網站托管了很多高質量的或者說世界頂尖的開源項目,比如Tensorflow。學習一下這個網站如何使用,注冊個賬號,學習一下Git的使用方法。這個網站有自己的tutorial和guide。
3.Linux: Tensorflow的主要運行平台就是Linux,目前在Windows上運行的方案是虛擬機,但是深度學習對計算要求還是比較高的,虛擬機效率不是太高,因此還是推薦在原生Linux中運行。新手推薦發行版是Ubuntu 或者Linux mint。這個可以自行搜索。學習Linux也有很多好處,因為很多開源軟件都only linux的。
4.Python:這是一種非常流行的腳本語言,龐大的第三方庫可以快速寫出短小容易理解的代碼,而且也是Tensorflow的推薦開發語言。教程太多了,這里給幾個優秀的教程:官網教程,Learn Python the Hard Way,Python2.7教程
5.深度學習(Deep Learning,DL):雖然Tensorflow已經封裝好了大部分DL的細節,但是如果不了解DL的相關核心概念,就會很難着手分析問題。首先強烈推薦這個教程,通讀一遍,然后還有這個,可以快速瀏覽或者只看自己不太明白的地方,還有這個分塊介紹的,還有幾篇blog,這個和這個講的是卷積神經網絡。圖像識別用的比較多的就是卷積神經網絡,這兩篇可以看看。
6.Tensorflow:前面都是鋪墊,是為了更好地使用Tensorflow。官方的文檔不錯,可以從get started然后tutorial看起,有個中文的翻譯版,但是更新不及時(官方已經v1.0,這個可能是v0.8或者v0.7),可能有坑,可以和英文對照着看,還有個Tensorflow的教程,也不錯。有篇FIRST CONTACT WITH TENSORFLOW也不錯。
7.優秀博客:Hackery, Math & Design, Mike Bostock, http://colah.github.io/, Café, bonne nuit這幾個都是我在學習中遇到的非常nice的blog,有時間讀讀定會有所收獲。
8.經典論文及書籍:收集了一些DL的經典論文&書籍,有些雜亂,不過幾乎都是經典,各取所需吧。百度雲地址:(已刪除,內容上有些陳舊了,並且百度雲總是封殺鏈接)。各位有更好的歡迎推薦,我會整理上傳。
9.幾篇原創TF相關文章(持續更新):如何理解TensorFlow中的batch和minibatch,結合TensorFlow PlayGround的簡單神經網絡原理解釋,TensorFlow從源碼安裝,利用TF重訓練Google Inception模型,在Android端使用TensorFlow
其中,Python,DL,Tensorflow是重點,其他都是輔助, 自己感覺夠用即可,無需深入。學習中遇到困難首先向搜索引擎詢問。
2017.9.23 更新:更新部分鏈接以及資源描述
2017.7.31 更新:添加了一些推薦資源,序號重新排版,在首部重點推薦了幾個教程,方便快速上手
2017.7.30 更新:修正一些排版問題,刪除百度雲鏈接,增加CS 20SI課程
2017.5.16 更新:更新失效的百度雲地址
2017.4.3 更新:修正筆誤,同時加了前言
2017.3.30 更新:修正一些筆誤
2017.3.28 更新:完成了近期更新計划,重新整理了所有內容,同時及時跟進了新的內容
2017.2.17 更新:更新了在移動端使用TF的項目筆記,添加了近期更新計划
2016.11.25 更新:更新預告
2016.10.15 更新:更新了提及的軟件版本號,添加了第九部分原創TF相關博文
2016.8.8 更新:更新了提及的軟件版本號
2016.7.27 更新:重新排版,上傳了資料
2016.7.6 更新:重新排版
出處:https://www.zhihu.com/question/41667903