本博客所述BP神经网络,是本人研究总结的结果,希望对您有所帮助,当然,如果有需要,大家可以互相交流。

设计一个BP神经网络类,来实现一个BP神经网络。要求输入层节点数、隐层数、隐层节点数、输出层节点数、传递函数、算法等等可以由用户自主设定。

具体代码部分:http://blog.csdn.net/hjkhjk007/article/details/9010343

神经网络的基本原理

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。

神经元模型

图3-1人工神经元的基本构成单元

图3-1 给出了一个具有n个输入的基本BP神经元模型结构。图中每一个输入被赋予一定的权值,求和后形成神经元传递函数的输入。

激活函数的作用是对该神经元所获得的网络输入进行变换,也可以称为激励函数或活化函数,如图(3-1)所示 。BP网络属于多层网络,其常用的传递函数有线性函数(purelin)和sigmoid型函数。

1、线性函数(purelin)

a,b,d为常数。它的饱和值为a和a + b。

函数的饱和值为0和1。S形函数有较好的增益控制性能,如果BP网络输出层采用sigmoid型传递函数,那么网络的输出值就限制在[ a , a + b ]之间,根据实际需要,通常将输出值限制在[ -1 , 1 ]之间,而如果将线性函数purelin作为输出层的传递函数,那么输出值可为任意值。因此在隐层中常常采用sigmoid函数进行中间结果的传递,而在最后的输出层则用线性传递函数对输出值进行值域扩张。

3.2 BP神经网络结构

图3-4显示了一个具有n个输入,m个输出的BP神经网络结构。

图3-4 BP神经网络结的拓扑结构

信号只被允许从较低层流向较高层。

层号表示层的高低:层号较小者,层次较低,层号较大者,层次较高。

输入层:被记作第0层。该层负责接收来自网络外部的信息

第j层:第j-1层的直接后继层(j>0),它直接接受第j-1层的输出。

输出层:它是网络的最后一层,具有该网络的最大层号,负责输出网络的计算结果。

隐藏层:除输入层和输出层以外的其它各层均叫隐藏层。隐藏层不直接接受外界的信号,也不直接向外界发送信号

约定 :

输出层的层号为该网络的层数:n层网络或n级网络。

第j-1层到第j层的联接矩阵为第j层联接矩阵,输出层对应的矩阵叫输出层联接矩阵。今后我们在需要的时候一般用表示第j层矩阵。

前向型神经网络通常具有一个或多个由sigmoid神经元构成的隐层,和一个由线性神经元构成的输出层。多个具有非线性传递函数的神经元层使得网络可以学习输入和输出之间的非线性关系,而线性输出层则使网络可以产生区间[ -1 , 1 ]之外的值。

如果需要对网络输出的值域加以限制,例如想要将网络输出值限制在[ 0 , 1 ]以内,那么输出层就应该采用sigmoid型函数。

3.3 BP网络学习规则

BP网络的学习是有监督的学习,训练过程中需要提供输入向量P和输出向量T,根据网络误差性能对网络权值和偏差进行调整,最终实现期望的功能。前向型神经网络仍然采用均方误差作为默认的网络性能函数,网络学习的过程就是使均方误差最小化的过程。BP学习规则是使用不同的算法来实现网络均方误差的最小化,本文主要阐述五种算法:基本的BP算法(traingd)增加动量项的BP算法(traingdm)带动量及自适应学习速率的BP算法(traingdx)共轭梯度算法(traincgf)弹性梯度算法(trainrp)。文档中所有的传递函数默认为sigmoid型,但purelin型相对比较简单,因此用户可参照本文自行推理。

3.3.1基本的BP算法(traingd)

基本的BP算法,是最简单的BP算法,也是最基础的BP算法。我们知道函数的梯度方向是函数值增加最快的方向,那么负梯度方向便是函数值减小最快的方向,基本的BP算法就是沿着负梯度方向通过调整权值来减小均方误差的,其他的算法基本都是在BP算法的基础上进行改进的。

用输出层的误差来调整输出层的权矩阵,并估计输出层的直接前导层的误差,然后再用输出层的前导层误差估计更前一层的误差,如此获得了所有其它各层的误差估计。用这些估计实现对权矩阵的修改,形成将输出端表现出的误差沿着与输入信号相反的方向逐级向输入端传递的过程。这个过程的具体实现如下文所述。

(一)神经元的输入输出

神经元的网络输入:

根据图(3-1)和式3-4,任意神经元的输入可表示为

图3-5 传递函数(3-10)

(二)训练过程概述

样本:(输入向量,理想输出向量)

权初始化:小随机数与饱和状态。

Step1, 向前传播阶段:

(1)从样本集中取一个样本,将输入网络;

(2)计算相应的实际输出:

如果将学习速率设定为可变的,那么就可以改变学习算法的性能。具备自适应学习速率的梯度下降算法可以在保持训练过程稳定的前提下采用最大的步长。

本程序中采用的方法是通过比较相邻两次迭代之间的误差平方和的大小,来判断学习速率是增加还是减少。

3.3.5弹性梯度算法(trainrp)

该算法是在traingdx算法的基础上实现的,也是对BP算法的进一步改进。多层神经网络通常在隐层中采用sigmoid型传递函数。由于sigmoid函数的作用是将无限的输入范围压缩到一个有限的输出范围内,因此它们都有这样一个特性,即输入样本变量非常大的时候,函数曲线斜率将会逐渐接近于零。这可能造成的一个问题,即如果采用该算法进行训练,梯度值有可能会很小,这样每一次迭代的权值和偏差的该变量会很小,尽管它们距离最优值还有很远的距离。

有弹性的BP训练算法的目标就是消除由于误差函数偏微分的数值上变动所造成的不利于训练的效应。这种算法只通过偏微分函数符号决定权值的变化方向,而忽略偏微分数值的大小,权值的变化量则由一个独自更新的数值来决定。

如果在连续两次迭代中误差性能函数对某一权值的偏导数的正负号相同,则权值更新值会增大,而如果连续两次迭代中误差性能函数对某一权值的偏导数正负号不同,则权值更新值会减小,如果偏导数等于0,则迭代停止。这样,权值的变动过程是一个幅度逐渐减小的震荡过程,最后收敛到梯度为0的目标点。

4 BP神经网络类的实现

4.1概述

该类是基于BP神经网络的原理,利用c/c++语言在vs2005上实现的一个BP神经网络类,该类当中参数的命名、定义等都是参照matlab当中的神经网络工具箱来实现的。该BP神经网络的输入层节点数、隐层数、隐层节点数、输出层节点数、传递函数、算法等均可以由用户自主设定,并且给出通用的接口,方便用户使用。

该类的实现是通过网络构造网络训练网络应用三个模块实现的。网络构造模块的主要功能是创建一个BP神经网络;网络训练模块的主要功能是根据输入的训练数据,通过训练调整权值,最终输出一个需要的网络;应用模块的主要功能是提供方便用户使用的借口。网络实现的流程图如图4-1所示。

BP神经网络c++代码本人已经更新至微博,请阅读本人博客 BP神经网络原理分析及c++代码实现(下):http://blog.csdn.net/hjkhjk007/article/details/9010343

BP神经网络原理分析及c++代码实现(上)相关推荐

  1. BP神经网络原理分析及c++代码实现(下)

    本部分主要是BP神经网络的C++代码部分,在这里简单的介绍下代码的头文件,具体代码的实现以及测试数据,请在csdn资源里下载:http://download.csdn.net/detail/hjkhj ...

  2. BP神经网络原理与异或实例分析

    文章目录 BP神经网络原理介绍 一.BP神经网络算法原理是什么? 二.激活函数 1.激活函数作用 三.BP神经网络异或实例分析 1.问题: 2.分析: 3.代码 总结 BP神经网络原理介绍 BP神经网 ...

  3. 深度学习(神经网络) —— BP神经网络原理推导及python实现

    深度学习(神经网络) -- BP神经网络原理推导及python实现 摘要 (一)BP神经网络简介 1.神经网络权值调整的一般形式为: 2.BP神经网络中关于学习信号的求取方法: (二)BP神经网络原理 ...

  4. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

    BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...

  5. bp神经网络原理 实现过程,BP神经网络的实现包括

    1.BP神经网络原理 人工神经网络有很多模型,但是日前应用最广.基本思想最直观.最容易被理解的是多层前馈神经网络及误差逆传播学习算法(Error Back-Prooaeation),简称为BP网络. ...

  6. 基于果蝇优化的BP神经网络(分类应用) - 附代码

    基于果蝇优化的BP神经网络(分类应用) - 附代码 文章目录 基于果蝇优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.果蝇优化BP神经网络 3.1 BP神经 ...

  7. 基于布谷鸟优化的BP神经网络(分类应用) - 附代码

    基于布谷鸟优化的BP神经网络(分类应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.布谷鸟优化BP神经网络 3.1 B ...

  8. 基于人工蜂群优化的BP神经网络(分类应用) - 附代码

    基于人工蜂群优化的BP神经网络(分类应用) - 附代码 文章目录 基于人工蜂群优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.人工蜂群优化BP神经网络 3. ...

  9. BP神经网络原理及其应用,bp神经网络的工作原理

    1.BP神经网络的工作原理 人工神经网络就是模拟人思维的第二种方式.这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理.虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系 ...

  10. 基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码

    基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码 文章目录 基于哈里斯鹰优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.哈里斯鹰优化BP神经网络 3. ...

最新文章

  1. html6个圆圈放一排,html中两个选择框如何并排放置(一)
  2. Spring 配置JNDI(连接池)
  3. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
  4. 知乎进化:对抗内容“熵增”胜算几何?
  5. VR與AI的激情相遇
  6. C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果
  7. 对于Python中回调函数的理解
  8. 浏览器根对象window之caches
  9. 车牌识别用php算法,车牌识别算法实现及其代码实现之一:车牌区域检测
  10. mac系统spss26软件下载及安装教程
  11. 断网会导致xml加载失败数据库失败,识别不了,mybatis官网
  12. Smartdrv在安装操作系统中的作用
  13. 深入浅出面板数据分析
  14. 五种提前还款方式那种更划算
  15. Docker教程(一)入门教程
  16. uni-app点击按钮弹出提示框-uni.showModal(OBJECT),选择确定和取消
  17. 强联通分量与双连通分量
  18. ExoPlayer拖动进度条时显示视频缩略图
  19. 银行间债市衍生工具扩容:新版CRM落地 参与门槛降低
  20. 《Linux内核分析》 第二节 操作系统是如何工作的

热门文章

  1. 你真的分得清系统误差、随机误差和偶然误差吗?(含例题)
  2. 判断系统误差的matlab,基于MATLAB的误差数据处理实验报告
  3. 数据库(左、中、右)连接
  4. 机房运维服务器,机房服务器维护指导
  5. WEB前端是干什么的?
  6. 3D点云数据标注工具推荐
  7. 高校毕业设计管理系统【附源码】
  8. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
  9. screentogif能录制声音吗_学会了吗?使用GoldWave录制电脑中的声音
  10. 基于SSM车牌识别停车场管理系统