BP反向传播

这里讲的很清楚

	神经网络正向传播很好理解 即X*W+B 然后进入激活函数 然后作为下一层输入 
	反向传播即使:更新W的过程,使得下一次正向传播的时候可以使得输出更接近label 
	对于反向传播就是一个连续求导的过程 w=w-步长*(总误差到当前步的导数)
##手写神经网络
import numpy as np
def sigmoid(x,deriv=False):#deriv=True 为反向传播时候的导数
    if deriv:
        return x*(1-x)#传递的是导数
    return 1/(1+np.exp(-x))# 正向传播   
## x y
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]
]
)
## w
np.random.seed(1)
w0=np.random.random((3,5))#隐含层 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##使用最小平方差作为loss 的导数
    l2_delta=l2_error*sigmoid(l2,deriv=True)
    l1_error=l2_delta.dot(w1.T)# l1 out 对总误差的导数
    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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值