BP(Back Propagation)神经网络是一种具有三层或者三层以上的多层神经网络,每一层都由若干个神经元组成,它的左、右各层之间各个神经元实现全连接,即左层的每一个神经元与右层的每个神经元都由连接,而上下各神经元之间无连接。BP神经网络按有导师学习方式进行训练,当一对学习模式提供给神经网络后,其神经元的激活值将从输入层经各隐含层向输出层传播,在输出层的各神经元输出对应于输入模式的网络响应。然后,按减少希望输出与实际输出误差的原则,从输出层经各隐含层,最后回到输入层(从右到左)逐层修正各连接权。由于这种修正过程是从输出到输入逐层进行的,所以称它为“误差逆传播算法”。随着这种误差逆传播训练的不断修正,网络对输入模式响应的正确率也将不断提高。

一、BP神经网络的概念

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

二、BP神经网络的流程

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

1、网络的初始化

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

2、隐含层的输出

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

3、输出层的输出

4、误差的计算

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

5、权值的更新

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

6、偏置的更新

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

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

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

三、实验的仿真

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

MATLAB代码

主程序

%% BP的主函数  % 清空
clear all;
clc;  % 导入数据
load data;  %从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);  %输入输出数据
input=data(:,2:25);
output1 =data(:,1);  %把输出从1维变成4维
for i=1:2000  switch output1(i)  case 1  output(i,:)=[1 0 0 0];  case 2  output(i,:)=[0 1 0 0];  case 3  output(i,:)=[0 0 1 0];  case 4  output(i,:)=[0 0 0 1];  end
end  %随机提取1500个样本为训练样本,500个样本为预测样本
trainCharacter=input(n(1:1600),:);
trainOutput=output(n(1:1600),:);
testCharacter=input(n(1601:2000),:);
testOutput=output(n(1601:2000),:);  % 对训练的特征进行归一化
[trainInput,inputps]=mapminmax(trainCharacter');  %% 参数的初始化  % 参数的初始化
inputNum = 24;%输入层的节点数
hiddenNum = 50;%隐含层的节点数
outputNum = 4;%输出层的节点数  % 权重和偏置的初始化
w1 = rands(inputNum,hiddenNum);
b1 = rands(hiddenNum,1);
w2 = rands(hiddenNum,outputNum);
b2 = rands(outputNum,1);  % 学习率
yita = 0.1;  %% 网络的训练
for r = 1:30  E(r) = 0;% 统计误差  for m = 1:1600  % 信息的正向流动  x = trainInput(:,m);  % 隐含层的输出  for j = 1:hiddenNum  hidden(j,:) = w1(:,j)'*x+b1(j,:);  hiddenOutput(j,:) = g(hidden(j,:));  end  % 输出层的输出  outputOutput = w2'*hiddenOutput+b2;  % 计算误差  e = trainOutput(m,:)'-outputOutput;  E(r) = E(r) + sum(abs(e));  % 修改权重和偏置  % 隐含层到输出层的权重和偏置调整  dw2 = hiddenOutput*e';  db2 = e;  % 输入层到隐含层的权重和偏置调整  for j = 1:hiddenNum  partOne(j) = hiddenOutput(j)*(1-hiddenOutput(j));  partTwo(j) = w2(j,:)*e;  end  for i = 1:inputNum  for j = 1:hiddenNum  dw1(i,j) = partOne(j)*x(i,:)*partTwo(j);  db1(j,:) = partOne(j)*partTwo(j);  end  end  w1 = w1 + yita*dw1;  w2 = w2 + yita*dw2;  b1 = b1 + yita*db1;  b2 = b2 + yita*db2;    end
end  %% 语音特征信号分类
testInput=mapminmax('apply',testCharacter',inputps);  for m = 1:400  for j = 1:hiddenNum  hiddenTest(j,:) = w1(:,j)'*testInput(:,m)+b1(j,:);  hiddenTestOutput(j,:) = g(hiddenTest(j,:));  end  outputOfTest(:,m) = w2'*hiddenTestOutput+b2;
end  %% 结果分析
%根据网络输出找出数据属于哪类
for m=1:400  output_fore(m)=find(outputOfTest(:,m)==max(outputOfTest(:,m)));
end  %BP网络预测误差
error=output_fore-output1(n(1601:2000))';  k=zeros(1,4);
%找出判断错误的分类属于哪一类
for i=1:400  if error(i)~=0  [b,c]=max(testOutput(i,:));  switch c  case 1   k(1)=k(1)+1;  case 2   k(2)=k(2)+1;  case 3   k(3)=k(3)+1;  case 4   k(4)=k(4)+1;  end  end
end  %找出每类的个体和
kk=zeros(1,4);
for i=1:400  [b,c]=max(testOutput(i,:));  switch c  case 1  kk(1)=kk(1)+1;  case 2  kk(2)=kk(2)+1;  case 3  kk(3)=kk(3)+1;  case 4  kk(4)=kk(4)+1;  end
end  %正确率
rightridio=(kk-k)./kk  

激活函数

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

BP神经网络简单流程相关推荐

  1. 简述BP神经网络的流程,BP神经网络的实现包括

    (1)BP算法的学习过程中有两个过程是什么?(2)写出BP神经网络的数学模型,并以20 bp(backpropagation)网络是1986年由rumelhart和mccelland为首的科学家小组提 ...

  2. BP神经网络简单应用实例,bp神经网络的设计方法

    需要把MATLAB中的BP神经网络工具箱与自己的一个软件项目结合 这个就是C++与matlab混合编程.但是神经网络工具箱比较特别,它反盗用比较严厉.采用传统的混编方式,可以调用matlab自己的函数 ...

  3. BP神经网络算法基本原理,bp神经网络简单实例

    神经网络BP算法求代码 输入节点数为3x3x5=45,输出节点数为3x3+2=11,隐节点数通过试凑法得出.BP神经网络的Matlab代码见附件,修改节点数.增加归一化和反归一化过程即可. BP算法, ...

  4. 简单易学的机器学习算法——神经网络之BP神经网络

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

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

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

  6. 基于遗传算法优化的BP神经网络的 非线性函数拟合

    遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生 ...

  7. bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...

    摘要 乳腺肿瘤是女性病发率极高的一种肿瘤疾病, 但也是一种可以通过早期确诊.提早治疗来降低病死率的一种疾病.提出灰度共生矩阵结合BP神经网络的方法, 提高乳腺肿瘤的识别率.首先将红外乳腺图像进行预处理 ...

  8. 基于遗传算法的BP神经网络齿轮箱故障诊断实例

    一.BP神经网络概述 BP网络是一类多层的前馈神经网络.它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法.BP算法是 Rumelhart等人在1986年 ...

  9. 机器视觉学习笔记:BP神经网络详解

    https://www.toutiao.com/a6717160299482317324/ BP神经网络的代表者是D.Rumelhart和J.McCelland,"反向传播(backprop ...

最新文章

  1. RTMP 流媒体系统协议 简介
  2. 每天一个linux命令(31): /etc/group文件详解
  3. 在Vista以上版本运行WTL程序,有时候会提示“这个程序可能安装补正确...”的错误...
  4. 如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
  5. Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:
  6. PRML(1)--绪论(上)多项式曲线拟合、概率论
  7. 误删表数据,如何恢复过来
  8. 使用 Moq 测试.NET Core 应用 -- Mock 方法
  9. POJ 1128 Frame Stacking 拓扑排序+暴搜
  10. 三菱Q系列PLC程序,该设备由24个伺服电机、1套焊接机、2套CCD、4套扫码枪、6套位移传感器组成
  11. shred如果说它Linux系统是文件粉碎机它就更有名了
  12. excel对比两边数据去重
  13. 学校计算机网络教室,关元学校计算机网络教室使用管理制度
  14. ML-Agents命令及配置大全
  15. java大文件下载失败_java文件下载超过4G文件错误
  16. 尚硅谷Javase项目一(家庭收支记账软件)
  17. 查找python array索引
  18. webservice 缺少根元素_草莓种植,钙、硼元素十分重要,直接关系到草莓的产量和品质!...
  19. 嵌入式系统C语言编程基础
  20. web前端能做到多少岁

热门文章

  1. 辨识模型ARMA、ARMAX、ARIMA、ARIMAX
  2. R语言 tidyverse 之数据处理:dplyr (中)
  3. 台式计算机风扇为什么光散热,台式机箱风扇为什么要使用静音风扇
  4. 1015-计算并联电阻的阻值
  5. 安装SQl Server Polybase 报错解决方法
  6. AutoCAD中凸度的概念以及求圆弧的凸度
  7. 谈谈能带来高薪报酬的软件技术有哪些?
  8. 每日一课 | 如何用Python编写一个Lisp解释器
  9. linux删除slave网卡,Linux bonding网卡与其slave共同使用
  10. 渲染效果图哪家好?2022最新实测(三)