國科大-模式識別-第四次作業-神經網絡bp書寫代碼跌坑總結

寫前說明:本人代碼水平不太好,初學神經網絡知識。此文章主要爲了記錄自己錯過的地方,也希望能幫助到有同樣困難的同學。

1、梯度下降

	def update(self, grads, lr):
		self.W1 -= lr * grads["dW1"]
		self.W2 -= lr * grads["dW2"]
		self.b1 -= lr * grads["db1"]
		self.b2 -= lr * grads["db2"]

是“減號”啊,下降,不就是減號麼!剛開始的我認爲w+=dw,dw可以通過計算得出可正可負,所以寫正負沒有關係。我的天,所以我得出的一直是左圖,嗚嗚嗚,要哭了,咋弄咋不對,錯誤率還上升了。(我覺得這裏可以數學分析一波,之後再)

2、關於矩陣、向量、標量的混合計算

****重要****

因爲我出現了矩陣相乘時維度缺失;.T(轉置)結果沒有反應,後來發現是因爲是[0,0,0]這種形式,是沒有辦法實用.T(轉置);頻繁使用.reshape()添加這個維度結果搞得亂七八槽,複用性極差。

shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

所以應該在一開始讀取數據的時候,規整好。假如一個樣本是三維的,如[0.1, 0.2, 0.3]。建議不要把samples直接複製成[[0.1, 0.2, 0.3],[0.3,0.4,0.6],……],因爲取出第i個數據的時候,X_i = [0.1, 0.2, 0.3],很容易矩陣相乘的時候出問題。搞三個維度,x_0是樣本寬度,x_1是樣本長度,x_2是樣本個數,方法如下

X.reshape(X.shape[0],1,X.shape[1])

把數據規整爲[[[0.1, 0.2, 0.3]]\n,[[0.2, 0.3, 0.4]]\n],這樣在取出第i個數據的時候X = [[0.1, 0.2, 0.3]],方便後續計算,很規整。

3、關於算法函數如何設計,設計哪些函數,哪些函數之間有調用關係,在詢問過我朋友是否願意公開代碼後再補充,寫的真的是賞心悅目。

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