BP神经网络简单流程
BP(Back Propagation)神经网络是一种具有三层或者三层以上的多层神经网络,每一层都由若干个神经元组成,它的左、右各层之间各个神经元实现全连接,即左层的每一个神经元与右层的每个神经元都由连接,而上下各神经元之间无连接。BP神经网络按有导师学习方式进行训练,当一对学习模式提供给神经网络后,其神经元的激活值将从输入层经各隐含层向输出层传播,在输出层的各神经元输出对应于输入模式的网络响应。然后,按减少希望输出与实际输出误差的原则,从输出层经各隐含层,最后回到输入层(从右到左)逐层修正各连接权。由于这种修正过程是从输出到输入逐层进行的,所以称它为“误差逆传播算法”。随着这种误差逆传播训练的不断修正,网络对输入模式响应的正确率也将不断提高。
一、BP神经网络的概念
二、BP神经网络的流程
1、网络的初始化
2、隐含层的输出
3、输出层的输出
4、误差的计算
5、权值的更新
- 隐含层到输出层的权重更新
- 输入层到隐含层的权重更新
6、偏置的更新
- 隐含层到输出层的偏置更新
- 输入层到隐含层的偏置更新
7、判断算法迭代是否结束
三、实验的仿真
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神经网络简单流程相关推荐
- 简述BP神经网络的流程,BP神经网络的实现包括
(1)BP算法的学习过程中有两个过程是什么?(2)写出BP神经网络的数学模型,并以20 bp(backpropagation)网络是1986年由rumelhart和mccelland为首的科学家小组提 ...
- BP神经网络简单应用实例,bp神经网络的设计方法
需要把MATLAB中的BP神经网络工具箱与自己的一个软件项目结合 这个就是C++与matlab混合编程.但是神经网络工具箱比较特别,它反盗用比较严厉.采用传统的混编方式,可以调用matlab自己的函数 ...
- BP神经网络算法基本原理,bp神经网络简单实例
神经网络BP算法求代码 输入节点数为3x3x5=45,输出节点数为3x3+2=11,隐节点数通过试凑法得出.BP神经网络的Matlab代码见附件,修改节点数.增加归一化和反归一化过程即可. BP算法, ...
- 简单易学的机器学习算法——神经网络之BP神经网络
一.BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...
- BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)
BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...
- 基于遗传算法优化的BP神经网络的 非线性函数拟合
遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生 ...
- bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...
摘要 乳腺肿瘤是女性病发率极高的一种肿瘤疾病, 但也是一种可以通过早期确诊.提早治疗来降低病死率的一种疾病.提出灰度共生矩阵结合BP神经网络的方法, 提高乳腺肿瘤的识别率.首先将红外乳腺图像进行预处理 ...
- 基于遗传算法的BP神经网络齿轮箱故障诊断实例
一.BP神经网络概述 BP网络是一类多层的前馈神经网络.它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法.BP算法是 Rumelhart等人在1986年 ...
- 机器视觉学习笔记:BP神经网络详解
https://www.toutiao.com/a6717160299482317324/ BP神经网络的代表者是D.Rumelhart和J.McCelland,"反向传播(backprop ...
最新文章
- RTMP 流媒体系统协议 简介
- 每天一个linux命令(31): /etc/group文件详解
- 在Vista以上版本运行WTL程序,有时候会提示“这个程序可能安装补正确...”的错误...
- 如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
- Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:
- PRML(1)--绪论(上)多项式曲线拟合、概率论
- 误删表数据,如何恢复过来
- 使用 Moq 测试.NET Core 应用 -- Mock 方法
- POJ 1128 Frame Stacking 拓扑排序+暴搜
- 三菱Q系列PLC程序,该设备由24个伺服电机、1套焊接机、2套CCD、4套扫码枪、6套位移传感器组成
- shred如果说它Linux系统是文件粉碎机它就更有名了
- excel对比两边数据去重
- 学校计算机网络教室,关元学校计算机网络教室使用管理制度
- ML-Agents命令及配置大全
- java大文件下载失败_java文件下载超过4G文件错误
- 尚硅谷Javase项目一(家庭收支记账软件)
- 查找python array索引
- webservice 缺少根元素_草莓种植,钙、硼元素十分重要,直接关系到草莓的产量和品质!...
- 嵌入式系统C语言编程基础
- web前端能做到多少岁