一、BP神经网络的概念

    BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:
(三层BP神经网络模型)
BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。

二、BP神经网络的流程

    在知道了BP神经网络的特点后,我们需要依据信号的前向传播和误差的反向传播来构建整个网络。

1、网络的初始化

    假设输入层的节点个数为,隐含层的节点个数为,输出层的节点个数为。输入层到隐含层的权重,隐含层到输出层的权重为,输入层到隐含层的偏置为,隐含层到输出层的偏置为。学习速率为,激励函数为。其中激励函数为取Sigmoid函数。形式为:

2、隐含层的输出

    如上面的三层BP网络所示,隐含层的输出

3、输出层的输出

4、误差的计算

    我们取误差公式为:
其中为期望输出。我们记,则可以表示为
以上公式中,

5、权值的更新

    权值的更新公式为:
这里需要解释一下公式的由来:
这是误差反向传播的过程,我们的目标是使得误差函数达到最小值,即,我们使用梯度下降法:
  • 隐含层到输出层的权重更新
则权重的更新公式为:
  • 输入层到隐含层的权重更新
其中
 
则权重的更新公式为:

6、偏置的更新

    偏置的更新公式为:
  • 隐含层到输出层的偏置更新
则偏置的更新公式为:
  • 输入层到隐含层的偏置更新
其中
 
则偏置的更新公式为:

7、判断算法迭代是否结束

    有很多的方法可以判断算法是否已经收敛,常见的有指定迭代的代数,判断相邻的两次误差之间的差别是否小于指定的值等等。

三、实验的仿真

    在本试验中,我们利用BP神经网络处理一个四分类问题,最终的分类结果为:

MATLAB代码

主程序
  1. %% BP的主函数
  2. % 清空
  3. clear all;
  4. clc;
  5. % 导入数据
  6. load data;
  7. %从1到2000间随机排序
  8. k=rand(1,2000);
  9. [m,n]=sort(k);
  10. %输入输出数据
  11. input=data(:,2:25);
  12. output1 =data(:,1);
  13. %把输出从1维变成4维
  14. for i=1:2000
  15. switch output1(i)
  16. case 1
  17. output(i,:)=[1 0 0 0];
  18. case 2
  19. output(i,:)=[0 1 0 0];
  20. case 3
  21. output(i,:)=[0 0 1 0];
  22. case 4
  23. output(i,:)=[0 0 0 1];
  24. end
  25. end
  26. %随机提取1500个样本为训练样本,500个样本为预测样本
  27. trainCharacter=input(n(1:1600),:);
  28. trainOutput=output(n(1:1600),:);
  29. testCharacter=input(n(1601:2000),:);
  30. testOutput=output(n(1601:2000),:);
  31. % 对训练的特征进行归一化
  32. [trainInput,inputps]=mapminmax(trainCharacter');
  33. %% 参数的初始化
  34. % 参数的初始化
  35. inputNum = 24;%输入层的节点数
  36. hiddenNum = 50;%隐含层的节点数
  37. outputNum = 4;%输出层的节点数
  38. % 权重和偏置的初始化
  39. w1 = rands(inputNum,hiddenNum);
  40. b1 = rands(hiddenNum,1);
  41. w2 = rands(hiddenNum,outputNum);
  42. b2 = rands(outputNum,1);
  43. % 学习率
  44. yita = 0.1;
  45. %% 网络的训练
  46. for r = 1:30
  47. E(r) = 0;% 统计误差
  48. for m = 1:1600
  49. % 信息的正向流动
  50. x = trainInput(:,m);
  51. % 隐含层的输出
  52. for j = 1:hiddenNum
  53. hidden(j,:) = w1(:,j)'*x+b1(j,:);
  54. hiddenOutput(j,:) = g(hidden(j,:));
  55. end
  56. % 输出层的输出
  57. outputOutput = w2'*hiddenOutput+b2;
  58. % 计算误差
  59. e = trainOutput(m,:)'-outputOutput;
  60. E(r) = E(r) + sum(abs(e));
  61. % 修改权重和偏置
  62. % 隐含层到输出层的权重和偏置调整
  63. dw2 = hiddenOutput*e';
  64. db2 = e;
  65. % 输入层到隐含层的权重和偏置调整
  66. for j = 1:hiddenNum
  67. partOne(j) = hiddenOutput(j)*(1-hiddenOutput(j));
  68. partTwo(j) = w2(j,:)*e;
  69. end
  70. for i = 1:inputNum
  71. for j = 1:hiddenNum
  72. dw1(i,j) = partOne(j)*x(i,:)*partTwo(j);
  73. db1(j,:) = partOne(j)*partTwo(j);
  74. end
  75. end
  76. w1 = w1 + yita*dw1;
  77. w2 = w2 + yita*dw2;
  78. b1 = b1 + yita*db1;
  79. b2 = b2 + yita*db2;
  80. end
  81. end
  82. %% 语音特征信号分类
  83. testInput=mapminmax('apply',testCharacter',inputps);
  84. for m = 1:400
  85. for j = 1:hiddenNum
  86. hiddenTest(j,:) = w1(:,j)'*testInput(:,m)+b1(j,:);
  87. hiddenTestOutput(j,:) = g(hiddenTest(j,:));
  88. end
  89. outputOfTest(:,m) = w2'*hiddenTestOutput+b2;
  90. end
  91. %% 结果分析
  92. %根据网络输出找出数据属于哪类
  93. for m=1:400
  94. output_fore(m)=find(outputOfTest(:,m)==max(outputOfTest(:,m)));
  95. end
  96. %BP网络预测误差
  97. error=output_fore-output1(n(1601:2000))';
  98. k=zeros(1,4);
  99. %找出判断错误的分类属于哪一类
  100. for i=1:400
  101. if error(i)~=0
  102. [b,c]=max(testOutput(i,:));
  103. switch c
  104. case 1
  105. k(1)=k(1)+1;
  106. case 2
  107. k(2)=k(2)+1;
  108. case 3
  109. k(3)=k(3)+1;
  110. case 4
  111. k(4)=k(4)+1;
  112. end
  113. end
  114. end
  115. %找出每类的个体和
  116. kk=zeros(1,4);
  117. for i=1:400
  118. [b,c]=max(testOutput(i,:));
  119. switch c
  120. case 1
  121. kk(1)=kk(1)+1;
  122. case 2
  123. kk(2)=kk(2)+1;
  124. case 3
  125. kk(3)=kk(3)+1;
  126. case 4
  127. kk(4)=kk(4)+1;
  128. end
  129. end
  130. %正确率
  131. rightridio=(kk-k)./kk

激活函数

  1. %% 激活函数
  2. function [ y ] = g( x )
  3. y = 1./(1+exp(-x));
  4. end

转载——关于bp神经网络的更多相关文章

  1. 【转载】BP神经网络

    原文地址:http://blog.csdn.net/acdreamers/article/details/44657439 今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识 ...

  2. BP神经网络—java实现(转载)

    神经网络的结构 神经网络的网络结构由输入层,隐含层,输出层组成.隐含层的个数+输出层的个数=神经网络的层数,也就是说神经网络的层数不包括输入层.下面是一个三层的神经网络,包含了两层隐含层,一个输出层. ...

  3. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

  4. bp神经网络及matlab实现

    本文主要内容包含: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例  本文以Fisher的Iris数据集 ...

  5. RBF神经网络和BP神经网络的关系

    作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. BP神经网络的公式推导

    如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法 BP网络的结构 BP网络的结构如下图所示,分为输入层(Input), ...

  7. BP神经网络的数学原理及其算法实现

    什么是BP网络 BP网络的数学原理 BP网络算法实现 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/44514073  上一篇 ...

  8. BP神经网络-- 基本模型

    转载:http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html BP 神经网络中的 BP 为 Back  Propagation 的简写,最早它 ...

  9. 模式识别之ocr项目---(模板匹配&BP神经网络训练)

    摘 要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出 ...

随机推荐

  1. 缓存技术内部交流_03_Cache Aside

    参考资料: http://www.ehcache.org/documentation/3.2/caching-patterns.html http://www.ehcache.org/document ...

  2. Java的序列化机制

    1. 所有实现序列化的类都必须实现Serializable接口,序列化有如下两个特点: 如果一个类可以被序列化,那么它的子类也可以被序列化 由于static代表类成员,trasient代表对象的临时数 ...

  3. 【收藏】SQL多行变一列

    CREATE TABLE DEPT (DeptNo INT IDENTITY(1, 1)NOT NULL ,  Country VARCHAR(50) ,  Location VARCHAR(50) ...

  4. <mvc:annotation-driven>新增标签

    以下为spring mvc 3.1中annotation-driven所支持的全部配置 <mvc:annotation-driven message-codes-resolver =" ...

  5. 【Error】:10061由于目标计算机积极拒绝,无法连接

    之前Windows上连接mongodb的时候首先用mongod.exe启动程序之后,用mongo.exe来连接数据库.但是在连接的时候,出现如下错误: error:10061 由于目标计算机积极拒绝, ...

  6. iptables详解(11):iptables之网络防火墙

    我们一起来回顾一下之前的知识,在第一篇介绍iptables的文章中,我们就描述过防火墙的概念,我们说过,防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防 ...

  7. 【cf 483 div2 -C】Finite or not?(数论)

    链接:http://codeforces.com/contest/984/problem/C 题意 三个数p, q, b, 求p/q在b进制下小数点后是否是有限位. 思路 题意转化为是否q|p*b^x ...

  8. 单例类singleton自动释放

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Request header field Content-Type is not allowed by Access-Control-Allow-Headers

    今天遇到一个跨域问题记录学习下: 一.问题: 跨域请求中包含自定义header字段时,浏览器console报错. Request header field xfilesize is not allow ...

  10. 判断两个控件在同一个Window上是否有重叠

    判断两个控件在同一个Window上是否有重叠 //对UIView写分类 - (BOOL)intersectWithView:(UIView *)view; - (BOOL)intersectWithV ...