用Python實現人臉檢測-3(BP-ANN Classification)

嗯,此次小項目的最後一個模塊,也是最為核心的模塊,後向反饋人工神經網絡,咱簡稱BP-ANN。

本模塊通過一點的樣本訓練之後,就是用來進行分類了。

這也是咱做的最為醜陋的一個模塊了,整個代碼寫下來,可讀性不是一般的差。。。。有時候,自己都不知道在寫得什麼玩意兒,真是給跪了,因為沒有使用向量化實現,完全使用迭代的方法,效率簡直。。。。反正就是寫得很醜陋,而且由於某個設計的缺陷,導致 隱層和輸出層的神經元數目不能大於輸入量。。。。orz 很多时候跑起來還會經常拋出“超出數域”的錯誤。。。。不知道是個什麼情況,不過還真覺得python在處理實數上,略為糾結,咱用了無數多個round函數來降低運算精度。

實現的步驟,先構建網絡,然後輸入數據,隨機權重,先正向傳播,然後誤差反向傳播。反覆最後兩步,直到cost最低,更具體,可以翻下之前咱的筆記,應該還算詳細,咱就是在之前筆記的基礎上,折騰出自己的BP-ANN實現,八過實現是一回事,效果很渣又是另一回事了。

媽蛋,咱在這個模塊,真的只能’just make it works,doesn’t keep it simple’。

下圖是使用上一篇PCA降維後的兩個數據,訓練出來的一次結果。最後三行,對應兩樣本的最後網絡輸出和它們的cost,咱這裡設置的threshold(yu值,繁體找不到這字。)為0.01,只要cost一旦小於或等於這個值,就終止迭代(迭代次數,咱設置為10k)。本模塊沒有實現正則化,所以權重有時候會偏大,導致過拟,其實只要在計算cost那裏在加上個正則化部分,就ok了,後面優化大概會加上。咱這些代碼可能都有些bugs沒發現,所以只能真的算是實驗性質而已了。

SVD REDUCTION

ok,三個基礎模塊就這麼簡單的完成,只要把它們像搭積木或疊樂高一樣整合一下,應該可以用一用,到達這裡咱的目的已經基本完成,花了差不多兩周的課餘時間

发表评论

电子邮件地址不会被公开。 必填项已用*标注