一、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. [Vue]Vue语法糖v-bind、v-on

    语法糖 :是指在不影响功能的情况下,添加某种方法实现同样的效果,从而方便程序开发,简化代码是书写. Vue.js的v-bind和v-on指令都提供了语法糖,也可以说是缩写. 1.v-bind可以省略, ...

  2. web微信开发总结

    这两天使用Django开发了web微信,实现了显示联系人以及收发消息的功能. 总结下这过程中使用到的一些知识. 1 http请求 通过chrome浏览器自带的开发者工具查看每次请求的信息,分析请求,包 ...

  3. python脚本6_打印菱形

    #输入菱形最宽的行所在的行数,打印菱形 m = int(input(">>>")) for n in range(m): print(" "* ...

  4. cordova安卓sdk

    Android SDK在线更新镜像服务器来下载安装: 1.北京化工大学镜像服务器地址: IPv4: ubuntu.buct.edu.cn/ 端口:80 IPv4: ubuntu.buct.cn/ 端口 ...

  5. torch7 调用caffe model 作为pretrain

    torch7 调用caffe model 作为pretrain torch7 caffe preTrain model zoo torch7 通过 loadcaffe 包,可以调用caffe训练得到的 ...

  6. @Primary-在spring中常被忽视的注解

    在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的.但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary  ...

  7. Struts2的Convention插件

    Struts2的Convention插件的作用:在Struts2中的/lib/struts2-convention-plugin-x.x.xx.x.jar Convention插件会自动搜索位于act ...

  8. CentOS7 LDAP 2.4 安装配置

    软件安装 # yum -y install openldap-servers openldap-clients # systemctl start slapd # systemctl enable s ...

  9. shiro的三大功能

    1.提供的功能

  10. poj 1182 食物链(高级的带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 76486   Accepted: 22742 Description ...