怎麼能開始會寫自己的tensorflow代碼?

大家好,現自學tensorflow,主要是通過看 tensorflow社區的文檔、Github上的代碼以及一些大佬們的筆記;但現在的問題是,大體可以看得明白別人的代碼,比如說在哪部分在訓練模型、哪部分在評估、用了什麼損失函數等,但是自己寫卻覺得很難下手,尤其目前的教材都是基於圖片的,因此在數據預處理等部分看的很暈,請問大家有什麼學習tensorflow的好的方法或資料嗎?非常謝謝!!


你不應該只停留在看代碼的程度上,還要模仿著例子程序來寫,一開始都是模仿,甚至是一個字一個字看著抄一遍,當你真正自己能跑通例子程序之後,就扔掉參考代碼,自己從頭寫一遍出來,如果你真的懂了全部流程,明白了當中所有的矩陣運算,偽代碼是能寫出來的,API不記得就可以去查。假如卡在了某個地方,不知道預處理要什麼操作或者怎樣新建圖、placeholder、variable,那證明你還沒熟悉,再回去抄一遍。

實際體驗是,一開始用別人的開源代碼,然後跑通之後發現不滿足自己某些要求,就想去魔改代碼,改著改著你就會自己去查API,深究進去改多了你就基本明白別人代碼的原理了,後面就會慢慢能自己寫了。

讀書破萬卷,下筆如有神。不僅適用於讀書,還適用於寫代碼。


我恰巧剛經歷了這樣一段學習TF的時間,希望關於我的經歷的描述可以幫助你:

0. 將GitHub上贊數最多的Example下載下來,例如(aymericdamien/TensorFlow-Examples)

  1. 從hello_world開始,了解constant和TF中Session的使用
  2. basic_operation中,學習placeholder及在placeholder上定義的操作。在 placeholder上的操作定義基本和使用python定義函數是類似的。
  3. 接下來的Linear Regression就是最簡單的完整訓練過程。可以看到分為幾個部分,Data Reader, Variable definition, Model define, Loss Optimizer, Training Session. 涉及的操作全都是自己用最基礎的數據類型定義的,更清楚placeholder等的使用。 接下來的Logistic Regression,KNN,K-means,亦然。
  4. 然後入手神經網路部分。最簡單的手寫兩層MLP代碼和Logistic Regression最大的差別就是多了一層非線性,其他完全一樣。最簡單的手寫CNN代碼與MLP的區別在於Conv操作的引入。能寫完到這裡,基本就明白了所有最基礎的東西。我們所寫的代碼就是建立運算圖,然後Training Session通過sess.run()將數據feed進去,流過定義好的運算圖。
  5. 之後上手高級API實現MLP,CNN和RNN等。就更容易理解,將底層我們曾自己實現的Variable初始化、簡單操作的實現(conv)、層與層之間的鏈接都封裝。Estimator是良心,但在市面上讀到的TF代碼用的不多,自己可以嘗試把玩。

這個Repo也有關於TensorBoard,model save/restore等的實際的東西,按照自己需求來學。

到此,如果以上代碼全都自己上手寫過了,基本不存在不會寫的情況了。然後就是和API之間的鬥爭了。

特別同意 @Professor ho 提到的,打碼破萬卷,下筆如有神。


stanford的入門課程cs20和作業的github

Tensorflow for Deep Learning Research?

web.stanford.edu

chiphuyen/stanford-tensorflow-tutorials?

github.com

看一遍slides,再跟著這個作業做一遍,再把作業代碼扔掉自己從頭寫一份,就算入門了。

youtube上還有個印度小哥的視頻,特地為這門課做的(stanford的講課視頻沒放到網上),可以看一下,不過我覺得slides已經夠詳細了,直接follow slides困難也不大


安利一把tensorlayer,看例子學就好


代碼這種事情,你看一萬遍也沒用。寫,一定要親手寫。

如果你手頭沒有現成的任務的話,可以自己用tensorflow親自擼一遍mnist,包括 generator, tfrecords等數據生成方式, 還有訓練測試代碼等等。

別只看,自己去趟坑,資料用處不大。

另外,我最近寫的一個示例,可以參考一下

https://github.com/shenekeng853/MyTensorflowWheel?

github.com


推薦閱讀:

TAG:Python | 深度學習DeepLearning | TensorFlow |