如何使用numpy搭建双隐层神经网络?看这一篇文章就够用了

本文详细介绍了如何使用numpy构建双隐层神经网络,包括理论部分的正向计算和反向传播,以及实现部分的算法伪码、初始化、正向传播、反向传播和训练过程。通过实战模拟,展示了在鸢尾花数据集上的应用,最终测试集分类准确率达到96.666666%。
摘要由CSDN通过智能技术生成

在阅读本文之前,请确保您已经有了一定的神经网络基础(具体的介绍可以看西瓜书)。

本文采用的是标准的BP算法,即每次仅针对一个样例更新权重和阈值。

本文将搭建用于分类的双隐层BP神经网络

一、理论部分

1.1 正向计算

符号说明

设我们的双隐层BP神经网络有m个输入神经元,n个输出神经元,第一个隐层有p个隐层神经元,第二个隐层有q个隐层神经元。

  • 权重:第i个输入神经元到第j个第一个隐层的神经元的权重记为w1_{ij}, 第i个第一个隐层的神经元到第j个第二个隐层的神经元的权重记为w2_{ij},第i个第二个隐层的神经元到第j个输出神经元的权重记为w3_{ij};
  • 阈值:第i个第一个隐层的神经元的阈值记为\theta1_i,第j个第二个隐层的神经元的阈值记为\theta2_j,第k个输出神经元的阈值记为\theta3_k;
  • 输入:第k个输入神经元接收到的输入为记为x_k,第k个第一个隐层的神经元接收到的输入值为\alpha_k,第k个第二个隐层的神经元接收到的输入值为\gamma_k,第k个输出神经元接收到的输入值为\beta_k;
  • 输出:第j个第一个隐层的神经元的输出记为a_j,第j个第二个隐层的神经元的输出记为b_j,第j个输出神经元的输出记为\widehat{y}_j

x = (x_1, x_2, \cdots,x_n)^T,激活函数为\sigma(x),我们定义:

                                                 \sigma(x) = (\sigma(x_1), \sigma(x_2),\cdots,\sigma(x_n))^T

公式推导

         {\bf\alpha}=\begin{bmatrix} \alpha_1\\ \alpha_2\\ \vdots\\ \alpha_p \end{bmatrix}_{p\times1},       W1=\begin{bmatrix} w1_{11} & w1_{21}&\cdots &w1_{m1} \\ w1_{12}&w1_{22} &\cdots &w1_{m2} \\ \vdots &\vdots & \ddots &\vdots \\ w1_{1p}&w1_{2p} &\cdots &w1_{mp} \end{bmatrix}_{p\times m},x=\begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_m \end{bmatrix}_{m\times1}

则有

                                                                      \large \alpha = W1 x

再令a=(a_1, a_2, \cdots,a_p)^T\theta1=(\theta1_1,\theta1_2, \cdots,\theta1_p)^T,从而

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值