[Bug Record] — binary classification accuracy converges to 0.5


Posted by sleepingjun on 2022-08-13

本文首發於我的Medium
最近在研究寫文的平台,赫然發現這邊還能做自己的blog,而且Code很好打進文章,雖然Medium也可以,但就是一種卡卡的感覺。
近期會兩邊都發文,看看哪邊比較順,再定下來只用一邊。也可能一邊純心得,一邊純紀錄Code也說不定~
(以下正文開始XD)


記錄一下在訓練模型的時候採到的坑。

前陣子,我的模型在用測試用的Data時很正常,準確率很穩定的都97%~98%左右,但在換成論文要用的data後突然變成accuracy都只有0.5。

為此困擾了我很久我嘗試過很多方法,最後發現問題在哪的時候想穿越回去打死我自己QQ。

這個問題其實可以套用到不同的Classifier model上,當你的模型訓練的accuracy穩定維持在 1/n (分成n類),你可以參考以下方法來解決你的問題:

  1. 檢查模型架構:使用model.summary()檢查模型架構,確認模型有真學進去。(看一下最下方的total parameter,大概可以了解你的模型有沒有好好學習)
  2. 檢查數據標籤(y or label)
    • 確認你的標籤是正確的,沒有標錯
    • 確認標籤的type正確
    • 確認標籤的size正確
  3. 檢查你的訓練資料有被打散: 最好每個batch中,每種類別的資料個數要均勻分配。確認Shuffle=True。
  4. 確認input shape: 不要懷疑,就算你能跑得動,你也可能是因為資料進去的樣子不太對,比如說一維data是用一、|或 ‧ 的樣子進去模型。
  5. 降低learning rage:把learning rate降低一些,比如說原本的0.1倍。
  6. 使用提早停止訓練機制: 防止overfitting,也防止你遇到本文的問題時,浪費很多時間在那邊0.5, 0.5, 0.5.....。
    當模型正確率連續幾個epoch都沒有長進,就判斷已收斂並結束學習,tensorflow 2 有一個EarlyStopping可以拿來用,不過要注意使用,有時候誤用會有明明還沒訓練好但是提前結束的情況。或是你也可以自己手刻,手刻的好處是,你想要的全都有~

最後發現是儲存生成的data時,label存的type不對,正確的size要看起來是(1,)之類的float。

最後,一個小提醒

如果你的資料在input前有什麼特殊儀式,請把他放在你心上,每分每秒想著他QQ
比如說要把平均值平移到0之類的,
記得之後拿data要predict的時候也要注意有沒有平移到正確位置,
還原的時候也要記得平移回去~
(by predict跟紀錄結果時,突然發現沒有平移的我)

Reference

https://forums.fast.ai/t/my-dogs-vs-cats-models-always-have-0-5-accuracy-whats-wrong/1665/14


在此紀錄一下使用心得...
這裡插入檔案的圖片好慢,慢到我生無可戀,索性不放了。這裡不太適合邊寫文邊分享我的圖庫XD。
By the way, 我覺得編輯頁面裡的文字比較好看0.0


#machine learning #classification







Related Posts

網路操作指令與工具:curl, ping, telnet, nslookup

網路操作指令與工具:curl, ping, telnet, nslookup

Day 20 & 21-Snake Game

Day 20 & 21-Snake Game

[ 前端工具 ] - Webpack

[ 前端工具 ] - Webpack


Comments