CNN和keras.fit_generator和一些心情(4-28)

CNN調參經驗彙總

寫在前面的累

最近忙的不亦樂乎,那種莫得方向的累。只是一名大學生而已,在這裏吐吐槽,寫一寫收穫的然後在跟大傢伙不吐不快。
忙的與CNN調參有關所以這篇寫的也是與CNN有關的內容


我還是先扯會皮
我跟着老師已經兩年,但基本是孤軍奮鬥,師兄師姐主要是做遷移學習。我做着之前的大師兄的深度學習,所以是他帶着我進入這個領域,然後就半年他就畢業了QAQ

按照順序,我做過多層感知機、CNN、RNN,然後暑假放假自己抄《機器學習實戰》的代碼去學經典的機器學習算法(svm還是沒看懂- =,估計現在連CNN鏈式推導也是手殘),那年八月中旬覺得機器學習好無聊又開始做爬蟲,回了學校師兄開心地說正好有任務!我就辛辛苦苦爬了半個月的數據(學了十天的爬蟲的菜雞能好到哪去= =完全靠找頁面規律爬數據好麼<-爬的是宗教性質的網站所以簡單)。

之後寫了一篇報告,寫的亂七八糟給了老師,師兄後來吐槽說都是他幫我改的。之後又搗鼓了遺傳算法,(強化學習看過但只是看過)。拿着遺傳算法硬剛第二年的國賽建模,我也是挺厲害的。
中間也參加過天池的比賽,莫得說,一個菜雞,只能說學會很多,但是都忘了嗝~~~。


好了,有了上述經歷你纔會明白我的經驗是很粗糙,但是主觀上覺得很實用的經驗,因爲基本上沒有人指導,基本是放羊式的學習,效率很低,成果絕對不多,但是指導了很多東西才知道自己要啥。
所以!!
當你真的準備要認認真真學習CNN的時候可以來找我一起交流。
那麼我覺有人問我,我會跟他說:

  • 選用你喜歡的包(tensorflow、pytorch、theano)

  • 學會使用各種封裝的工具包(keras、tflearn)

  • 學會調參多動手


1.第一件事和第二件事

從跟隨師兄用起tensorflow,我從來沒用過其他庫這不見的是個好事情,我聽說pytorch更適合於平日自己的研究,不過tensorflow自己也發現自己的缺點,所以正在逐步完善tf.eager

上述的每一步都值得試一試,當然老師說用啥那就用啥吧,不吃老人言吃虧在眼前是沒錯的。

如果使用原生的tensorflow代碼書寫是很慢的,所以我強烈建議使用已經封裝的工具包,我之前使用過tflearn因爲個人其包使用的代碼風格讓我很舒服,可是當tensorflow自己說明將kerastf.contrib獨立出來時以及師兄說自己也用這個時,我決定跟隨先人們的步伐。

但是很重要的一點
–>我十分強烈自己能徹頭徹尾使用的是同一種封裝工具包,那麼代碼效率一定比現在高的多,不用每次寫代碼都要一次一次翻api(本人成績不咋滴,平日裏爲了追上大佬們,基本上課期間不會做科研)。<–

2.第三件事

google確實比百度有用 本來我只是聽過卻不知道的,這段時間忙了之後,我承認了,查資料還是去google找吧,鏈接中也有如何有效查找需要資料的鏈接,學會查關鍵詞,英語差點也沒差的。(之前看了一篇關於如何查找資料的博客寫的非常好,很可惜我忘了收藏了,等找到了再給大家)
所以當你遇到技術上的難題時,自己先動動手查資料再去問別人,雖然可能從此寫代碼十分鐘,問個英語問題半小時,但是這樣做應該是沒錯的。
等等
。。。。
所以
CNN調參在哪裏?

Hello! 這裏!

參考鏈接:

所有的建議都在上述鏈接中,我依然十分建議自己好好看看。我正在完善自己的英語能力,我認爲我完整的翻譯出上面的文章我會進行相關的翻譯,也希望大家的支持,自己現在腦子裏裝的是:

  1. 不要相信訓練準確率,一定保證有Validation Data
  2. 多借鑑現有網絡的模塊,如Inception模塊殘差模塊。如何增加寬度和深度。
  3. BatchSize是很有用的,數量少了就好像只給你兩個點去畫一個拋物線,多了就是局部優值,可以去看看吳恩達的over fitting他的圖片很好描述了這個狀況。
  4. dropout放在maxpool之後,bn層放在激活層之後。
  5. 當你有多個訓練集或者多個模型放在多個文件裏時,使用os.system()(想到什麼偷懶的方法儘管去搜,比我們更懶的早早想出了何時的方法)。

這絕對只是淺陋的經驗,或者說只是用來做筆記給自己看的,請君隨意閱讀。

調參其實是我正在做的事情,我會慢慢學習,將筆記逐個上傳至本文的最後,或者記錄一些調參的心情。以上只是一些想說的話,想告訴大家而已。

討論有一個覺得挺有用的東西
這裏說一下keras.fit_generator的一個讓我很抓狂的情況

...

    145/147 [============================>.] - ETA: 0s - loss: 1.5847 - acc: 0.5120
    146/147 [============================>.] - ETA: 0s - loss: 1.5838 - acc: 0.5117
...
#以上是一輪訓練結束後,按理應該進入新的一輪,但是fit_generator會繼續顯示下列信息
...
     32/1567 [..............................] - ETA: 3:11 - loss: 1.8080 - acc: 0.4688
     64/1567 [>.............................] - ETA: 2:58 - loss: 1.7491 - acc: 0.5000
...
#經觀察這是1567是我validation data的總數目,難道?我的val集也被訓練了?當時是崩潰的。

經過提問和搜索,最終的答案是keras.fit_generator同樣爲validation data生成一個generator,於是測試也成一步一步的,但模型不會從這裏學習到任何東西。
大家可以再看看我在stackoverflow上的提問


好了,學習到的就這麼多。

但是心情是真的不怎麼的,本人大三,在保研的邊緣徘徊,上述的東西也是在論文修回的情況下一次一次試着改出來的。接近兩個禮拜的時間多多少少都在做這論文裏的東西,專業課確實落下了很多,但是又覺得做這件事的時候其實並不是專心的。

總有種裏外不是人的感覺,當然,以上其實可以在很早的時候就應該完成,一直拖到現在才完成並不是很好。選擇總是很重要的,時間安排總是重要的,當然了,心態更是重要了,畢竟像今天晚上,從西區教室自習爲了吃一個橙子跑回東區水果店又來到實驗打這麼一篇文章可能也說明本身就是一個浮躁的人吧hhhh。

更新文章的速度比較慢,但是十分樂意看到大家與我私信交流,希望在這裏結交到更多的朋友。

下次再見啦!
blush

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章