用python实现两层的bp神经网络
关键代码
正向传播,计算loss
h1 = np.maximum(0,np.dot(X, W1) + b1)
scores=np.dot(h1, W2) + b2
scores = scores - np.reshape(np.max(scores,axis=1),(N,-1))
p = np.exp(scores)/np.reshape(np.sum(np.exp(scores),axis=1),(N,-1))
loss = -sum(np.log(p[np.arange(N),y]))/N
loss += 0.5*reg*np.sum(W1*W1)+0.5*reg*np.sum(W2*W2)
反向传播,更新权值
dscores = p
dscores[range(N),y]-=1.0
dscores/=N
dW2 = np.dot(h1.T,dscores)
dh2 = np.sum(dscores,axis=0,keepdims=False)
da2 = np.dot(dscores,W2.T)
da2[h1<=0]=0
dW1 = np.dot(X.T,da2)
dh1 = np.sum(da2,axis=0,keepdims=False)
dW2 += reg*W2
dW1 += reg*W1
grads['W1']=dW1
grads['b1']