动手实现深度神经网络3 增加误差反向传播计算梯度&完成MNIST数据集手写数字识别

动手实现深度神经网络3 增加误差反向传播计算梯度

在这一部分中我们利用误差反向传播来计算梯度,误差反向传播计算梯度的速度大大超过了之前采用的数值微分发法。经过这次改进,我们的神经网络就能以很快的速度和较高的准确率完成MNIST数据集手写数字识别啦!

1.理解误差反向传播

关于误差反向传播的理论和使用计算图推导理解的过程,我之前的文章:Python深度学习入门笔记 2

理解误差反向传播&用python实现自动微分中已经介绍地很详细了啦,如果你对误差反向传播还不了解,就先去看看我这两篇文章吧。

2.代码实现

在我们的两层神将网络类中添加一个方法,如下。

def gradient_BP(self,x,t):
    w1, w2 = self.params['w1'], self.params['w2']
    b1, b2 = self.params['b1'], self.params['b2']
    grads = {
   }

    batch_num = x.shape[0]

    # 正向传播 forward
    a1=np.dot(x,w1)+b1
    z1=sigmoid(a1)
    a2=np.dot(z1,w2)+b2
    y=softmax(a2)


    # 反向传播 backward
    #一
    dy=(y-t)/batch_num
    #二
    grads['b2'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值