转载——关于bp神经网络

一、BP神经网络的概念

BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:

(三层BP神经网络模型)

BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。

二、BP神经网络的流程

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

1、网络的初始化

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

2、隐含层的输出

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

3、输出层的输出

4、误差的计算

我们取误差公式为:

其中为期望输出。我们记,则可以表示为

以上公式中,

5、权值的更新

权值的更新公式为:

这里需要解释一下公式的由来:

这是误差反向传播的过程,我们的目标是使得误差函数达到最小值,即,我们使用梯度下降法:

  • 隐含层到输出层的权重更新

则权重的更新公式为:

  • 输入层到隐含层的权重更新

其中

则权重的更新公式为:

6、偏置的更新

偏置的更新公式为:

  • 隐含层到输出层的偏置更新

则偏置的更新公式为:

  • 输入层到隐含层的偏置更新

其中

则偏置的更新公式为:

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

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

三、实验的仿真

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

MATLAB代码

主程序

[plain] view plaincopy

  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

激活函数

[plain] view plaincopy

  1. %% 激活函数
  2. function [ y ] = g( x )
  3. y = 1./(1+exp(-x));
  4. end
时间: 2024-10-12 11:30:40

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

【转载】BP神经网络

原文地址:http://blog.csdn.net/acdreamers/article/details/44657439 今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据 挖掘等领域.接下来介绍BP神经网络的原理及实现. Contents   1. BP神经网络的认识   2. 隐含层的选取   3. 正向传递子过程   4. 反向传递子过程   5. BP神经网络的注意点   6. BP神经网络的C++实现 1. BP神经网络的认识    

BP神经网络

BP 神经网络中的 BP 为 Back  Propagation 的简写,最早它是由Rumelhart.McCelland等科学家于 1986 年提出来的,Rumelhart 并在Nature 上发表了一篇非常著名的文章 <Learning representations by back-propagating errors> .随着时代的迁移,BP神经网络理论不断的得到改进.更新,现在无疑已成为了应用最为广泛的神经网络模型之一.让我们一起来探索下 BP神经网络最初的 基本模型和概念! 从神经

题外:分类篇(音乐风格分类)基于BP神经网络

语音特征参数MFCC的提取及识别 (2012-09-07 20:24:03) 转载▼ 耳蜗实质上相当于一个滤波器组,耳蜗的滤波作用是在对数频率尺度上进行的,在1000HZ下,人耳的感知能力与频率成线性关系:而在1000HZ以上,人耳的感知能力与频率不构成线性关系,而更偏向于对数关系,这就使得人耳对低频信号比高频信号更敏感.Mel频率的提出是为了方便人耳对不同频率语音的感知特性的研究.频率与Mel频率的转换公式为: MFCC在一定程度上模拟了人耳对语音的处理特点,应用了人耳听觉感知方面的研究成果,

BP神经网络及matlab实现

本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例  本文以Fisher的Iris数据集作为神经网络程序的测试数据集.Iris数据集可以在http://en.wikipedia.org/wiki/Iris_flower_data_set  找到.这里简要介绍一下Iris数据集: 有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类.不同品种的Iris花的花萼长度.花萼

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

作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. BP Neural Network - 使用 Automatic Differentiation (Backpropagation) 进行导数计算的层级图模型 (layer-by-layer graphical model) 只要模型是一层一层的,并使用AD/BP算法,就能称作 BP Ne

字符识别OCR研究一(模板匹配&amp;amp;BP神经网络训练)

摘 要 在MATLAB环境下利用USB摄像头採集字符图像.读取一帧保存为图像.然后对读取保存的字符图像,灰度化.二值化,在此基础上做倾斜矫正.对矫正的图像进行滤波平滑处理,然后对字符区域进行提取切割出单个字符.识别方法一是採用模板匹配的方法逐个对字符与预先制作好的字符模板比較,假设结果小于某一阈值则结果就是模板上的字符:二是採用BP神经网络训练.通过训练好的net对待识别字符进行识别.最然后将识别结果通过MATLAB下的串口工具输出51单片机上用液晶显示出来. keyword: 倾斜矫正.字符切

BP神经网络的公式推导

如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法 BP网络的结构 BP网络的结构如下图所示,分为输入层(Input),隐含层(Hidden),输出层(Output). 输入层的结点个数取决于输入的特征个数. 输出层的结点个数由分类的种类决定. 在输入层和输出层之间通常还有若干个隐含层,至于隐含层的个数以及每个隐含层的结点个数由训练工程师的经验来人为设定. 链接A曾提到由万能逼近定理,一般一个隐含层就足够了.且这个隐

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

神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法的基本流程和自己在训练BP神经网络的一些经验. BP神经网络的结构 神经网络就是模拟人的大脑的神经单元的工作方式,但进行了很大的简化,神经网络由很多神经网络层构成,而每一层又由许多单元组成,第一层叫输入层,最后一层叫输出层,中间的各层叫隐藏层,在BP神经网络中,只有

BP神经网络-- 基本模型

转载:http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html BP 神经网络中的 BP 为 Back  Propagation 的简写,最早它是由Rumelhart.McCelland等科学家于 1986 年提出来的,Rumelhart 并在Nature 上发表了一篇非常著名的文章 <Learning representations by back-propagating errors> .随着时代的迁移,BP神经网络理论不断的得到改进