看板 DataScience 關於我們 聯絡資訊
大家早安 最近在做辨識手寫數字的類神經網路 參考程式碼如下 https://reurl.cc/3bkeV 但是對裡面train部分其中兩條程式碼想不通 分別是 # update the weights for the links between the hidden and output layers self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs)) # update the weights for the links between the input and hidden layers self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs)) 這邊我的理解是透過斜率做梯度下降來調整權重 +=後面是學習率*斜率公式 但我的理解是在斜率為正的時候 權重應該是要下修的(減) 但這兩行卻是寫 self.wih += self.who += 這樣在斜率為正的時候權重不就會增加了嗎?這樣應該會離低點越來越遠吧? 不知道我是不是錯過或誤會了哪部分的運算,所以想在此請問各位了 不好意思還請各位撥空指教,謝謝各位 如果問題不好還請多包含 ----- Sent from JPTT on my HTC_D10i. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.243.86 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1555642900.A.5BA.html
moodoa3583: 剛剛找出問題了,在斜率公式裡面output_errors和hidde 04/19 14:40
moodoa3583: n_errors前是有帶負號的,但程式碼裡面沒有加負號,所 04/19 14:40
moodoa3583: 以權重的確是要寫+=才會是正確的 04/19 14:40
moodoa3583: 也可以寫成 04/19 14:42
moodoa3583: self.who -= self.lr * numpy.dot((-1*(output_error 04/19 14:42
moodoa3583: s) * final_outputs * (1.0 - final_ 04/19 14:42
moodoa3583: outputs)), numpy.transpose(hidden_outputs)) 04/19 14:42
moodoa3583: 對我而言會比較直覺一些 04/19 14:43
thefattiger: 你誤會很大,權重增加不代表loss會增加 04/20 00:21
的確,權重增加可能會造成誤差增加或減少,端看當下在圖形上的斜率來決定,抑或是我還有哪裡沒有考量到?還請多指教,謝謝
OnePiecePR: 樓上正解。不過版主應該能馬上轉過來。 04/20 21:00
※ 編輯: moodoa3583 (114.137.243.86), 04/21/2019 13:18:10
st1009: 好像有人在呼喚板主,可是我看不懂有甚麼事需要板主... 04/21 14:54
jack82822005: 應該是指文主?XD 04/23 03:20