这里讲的很清楚
神经网络正向传播很好理解 即X*W+B 然后进入激活函数 然后作为下一层输入
反向传播即使:更新W的过程,使得下一次正向传播的时候可以使得输出更接近label
对于反向传播就是一个连续求导的过程 w=w-步长*(总误差到当前步的导数)
import numpy as np
def sigmoid(x,deriv=False):
if deriv:
return x*(1-x)
return 1/(1+np.exp(-x))
x=np.array([
[0,1,1],
[1,0,1],
[1,0,0],
[0,0,1],
[0,1,1]
])
y=np.array([
[0],
[1],
[0],
[1],
[0]
]
)
np.random.seed(1)
w0=np.random.random((3,5))
w1=np.random.random((5,1))
for i in range(10000):
l0=x
l1=sigmoid(np.dot(l0,w0))
l2=sigmoid(np.dot(l1,w1))
l2_error=y-l2
l2_delta=l2_error*sigmoid(l2,deriv=True)
l1_error=l2_delta.dot(w1.T)
print(l2_delta.shape)
l1_delta=l1_error*sigmoid(l1,deriv=True)
w1+=l1.T.dot(l2_delta)
w0+=l0.T.dot(l1_delta)
if i%1000==1:
print(y-l2)