BP神经网络介绍及算法实现
文章目录
- 一、BP神经网络简介及算法实现
- 1.向前传播阶段
- 1)隐藏层神经元输入
- 2)隐藏层神经元输出
- 3)输出层神经元
- 2.向后传播阶段
- 1)输出层权的调整
- 2)隐藏层权的调整
- 3.误差测度(cost function)
- 二、随机生成数据集
- ※初始化说明
- 完整的BP实现、训练代码以及随机生成数据集和对照实验的代码详见[https://download.csdn.net/download/cc__cc__/33194209](https://download.csdn.net/download/cc__cc__/33194209)
一、BP神经网络简介及算法实现
1.向前传播阶段
1)隐藏层神经元输入
本实验以单隐藏层的神经网络为例,隐藏层神经元的输入为neti=x1w1i+x2w2i+⋯+xnwninet_i=x_1 w_{1i}+x_2 w_{2i}+⋯+x_n w_{ni}neti=x1w1i+x2w2i+⋯+xnwni其中n对应输入数据的特征数,为加快收敛速度,本实验中给每一个神经元增加一个偏移量来加快收敛速度。涉及到的代码如下:
def hidden_in(feature, w0, b0):m = np.shape(feature)[0]hidden_in = feature * w0for i in range(m):hidden_in[i, ] += b0return hidden_in
2)隐藏层神经元输出
隐藏层神经元的输入经过激活函数f即可得到神经元的输出o=f(net),常见激活函数包括sigmoid、ReLU、Leaky_ReLU和tanh等,其表达式如下,相关代码位于activation.py中。
3)输出层神经元
在向前传播阶段,输出层神经元的输入和输出与隐藏层同理,不再重复。
2.向后传播阶段
1)输出层权的调整
代码示意如下:
delta_output = -np.multiply((label - output_out), act_derivate(output_in, mode=activate))
w1 = w1 - alpha * (hidden_output.T * delta_output)
2)隐藏层权的调整
代码示意如下:
delta_hidden = np.multiply((delta_output * w1.T), act_derivate(hidden_input, mode=activate))
w0 = w0 - alpha * (feature.T * delta_hidden)
3.误差测度(cost function)
向后传播算法的目的是希望缩小实际计算输出的O与理想输出(标签)Y的差距,所以整个过程需要按极小化误差的方式调整权矩阵。网络关于第p个样本的误差测度Ep=12∑j=1m(ypj−opj)2E_p=\frac{1}{2}∑_{j=1}^{m}(y_{pj}-o_{pj} )^2 Ep=21j=1∑m(ypj−opj)2由此可得网络关于整个样本集的误差测度为:E=∑pEpE=∑_pE_pE=p∑Ep
二、随机生成数据集
为了便于分析不同输入向量维度、分类类别数对于BP算法应用于分类问题的影响,本实验选择借助sklearn库中的make_classification函数随机生成数据并按照8:2的比例划分训练集和测试集写入相应的txt文档中。
关键代码如下:
X1, Y1 = make_classification(n_samples=num, n_features=nfeatute, n_redundant=0, n_clusters_per_class=1, n_classes=nclass)
当特征数目为2或3时,可将数据可视化,图1、2为示例:
当特征数大于3时,同样地将数据写入txt文档,图3为特征数为4的3分类数据集示例。
※初始化说明
由于本实验使用两级BP神经网络,所以共包含两个权重矩阵W0(输入-隐藏层)和W1(隐藏层-输出),借助random.rand随机对W0、W1及相应的偏置进行初始化。具体代码如下所示:
w0 = np.mat(np.random.rand(n, n_hidden))
w0 = w0 * (8.0 * sqrt(6) / sqrt(n + n_hidden)) - \np.mat(np.ones((n, n_hidden))) * (4.0 * sqrt(6) / sqrt(n + n_hidden))
b0 = np.mat(np.random.rand(1, n_hidden))
b0 = b0 * (8.0 * sqrt(6) / sqrt(n + n_hidden)) - \np.mat(np.ones((1, n_hidden))) * (4.0 * sqrt(6) / sqrt(n + n_hidden))
w1 = np.mat(np.random.rand(n_hidden, n_output))
w1 = w1 * (8.0 * sqrt(6) / sqrt(n_hidden + n_output)) - \np.mat(np.ones((n_hidden, n_output))) * \
(4.0 * sqrt(6) / sqrt(n_hidden + n_output))
b1 = np.mat(np.random.rand(1, n_output))
b1 = b1 * (8.0 * sqrt(6) / sqrt(n_hidden + n_output)) - \np.mat(np.ones((1, n_output))) * (4.0 * sqrt(6) / sqrt(n_hidden + n_output))
- 可根据情况设置多组对照实验,例如1)不同输入向量(特征)/输出向量(类别)维度的对比实验;2)不同隐藏层神经元个数的对比实验;不同激活函数的对比实验;不同学习率的对比实验等。
完整的BP实现、训练代码以及随机生成数据集和对照实验的代码详见https://download.csdn.net/download/cc__cc__/33194209
BP神经网络介绍及算法实现相关推荐
- 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码
基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...
- 蚁群算法优化BP神经网络回归预测的算法设计-附代码
蚁群算法ACO优化BP神经网络回归预测的算法设计及其MATLAB代码实现 文章目录 蚁群算法ACO优化BP神经网络回归预测的算法设计及其MATLAB代码实现 1. 蚁群算法简介 2. 蚁群算法优化BP ...
- 鲸鱼优化算法优化BP神经网络回归预测的算法设计-附代码
鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现 文章目录 鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现 1. 算法描述 2. 鲸鱼优化算法优化BP神经 ...
- 基于bp的神经网络算法,bp神经网络是什么算法
BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...
- 基于bp神经网络的pid算法,基于单神经元的pid控制
基于BP神经网络的PID控制器设计 参考一下刘金琨的<先进PID控制>这本书. 例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)其中a ...
- bp神经网络是什么算法,BP神经网络的基本思想
BP神经网络的工作原理 人工神经网络就是模拟人思维的第二种方式.这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理. 虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统 ...
- BP神经网络的核心算法,BP神经网络的核心思想
BP神经网络的核心问题是什么?其优缺点有哪些? . 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规 ...
- BP神经网络(反向传播算法原理、推导过程、计算步骤)
BP神经网络 1.反向传播算法的原理 2.反向传播算法参数学习的推导 3.反向传播算法参数更新案例 3.1 反向传播的具体计算步骤 3.1.1 计算输出层的误差 3.1.2 计算隐藏层误差 3.1.3 ...
- 基于bp神经网络的pid算法,神经网络pid控制器设计
基于BP神经网络的PID控制器设计 参考一下刘金琨的<先进PID控制>这本书. 例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)其中a ...
- 神经网络 | BP神经网络介绍(附源代码:BP神经网络-异或问题)
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
最新文章
- 设计模式之访问者模式、例子分析
- windows下nginx的简单使用
- where to park your bike?
- 编写简单的UDP应用
- android sdk 4.4.4,4.4.4 not in Android SDK manager
- 20145236 《Java程序设计》 第6周学习总结
- 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
- 创建项目连接错误_在不同项目下S7-1200主站模块和 S7-300 CP342-5通信的实现方法...
- edraw max for mac(亿图图示 mac)
- 流畅的python(一)python数据模型
- 微博微信QQ等开发者平台注册应用时提交签名信息的坑点。
- 在网吧想免费上网又何不自己动动手呢?
- 阿里云域名https证书(ssl证书)配置
- WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
- SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码
- 简单行人重识别代码到88%准确率 郑哲东 ​准备工作
- Android——浙理体育(飞翔的红蜻蜓)反编译分析
- vue中loading chunk-xxx.css failed和net::ERR_ABORTED 404 解决方法
- 黑客能追回被骗的钱吗
- golang面试题题目归纳
热门文章
- 谷歌“Adobe Flash Player已被屏蔽”的解决办法
- 计算机io设备是cpu控制的吗,操作系统--IO设备
- 服务器安装配置lldp协议
- Android 编辑 mhtml,Html Editor下载-Html Editor(Html编辑器)下载v1.0 安卓版-西西软件下载...
- 开启samba服务的设置步骤
- 串口转WIFI模块通信
- 举例说明儿化音的作用_六年级语文下学期复习资料
- csdm makerdown使用
- 三农数据(1990-2020)七:农村居民家庭生产现金支出、农村固定资产构成、固定资产投向
- 谷歌翻译api小尝试