神经网络代码实现备注

        前天重新学习了神经网络的原理后尝试再次实现,事实上,上个学期的期末已经实现过一次了,但是其中的代码上使用的方式与书上的原理不同,而神奇的是,这个代码也确实能跑,因此我打算在寒假重新学习并尝试使用代码实现。

        很可惜的是,直至在写这篇文章时,实现的模型的准确率依然只有4%,也就是出现bug了,但是暂时还没有想到问题在哪里,但是确实发现了很神奇的可以使得代码简洁的算法,下面将会描述。

        由于代码运行结果不顺利,因此我研究了一下原代码,发现在计算输出时,或者称之为前向传播时,以防忘记了,这里再写一下公式。

\alpha = \sum_{i=1}^{j}w_{hi}x_{i}

        大概是这样,目前使用的是三层的神经网络,就是一层输入层,一层隐藏层,一层输出层,假设已经设置好模型了,即把各个参数都搞好了,现在计算从输入层到隐藏层的值,即把输入的xi,乘以v_{ih},而对于结点h而言,即所有x乘权重之和。

        那么对于普通的实现而言,就需要设置循环一个个加,计算结果,然而很神奇的是,我发现之前的代码的做法则是使用numpy的dot()函数,即点乘,这里面当然也有用到矩阵的乘法,那么简洁代码的最优方法就是不是以一个个数据输入,而是直接传入一个矩阵,使用矩阵乘法即可,即

np.dot(X,w)

        假设输入的矩阵是一个(n,d)的数据X,每一行表示一个数据,各列表示输入的数据的某一维的数据,对于从输入层到隐藏层的权重用w表示,而w也是一个矩阵,其大小为(d,h),其中d表示输入的数据的维数,h表示隐藏层的结点个数,而根据矩阵乘法的计算方法,X*w后得到的数据的每一行,表示改行原始数据对应的隐藏层的结点的输出!

        这表示了之前写的那一大段用于计算的内容直接使用dot()即可,这是我第一次感受到之前学的东西能用的上,十分激动,因此决定记录。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值