转载——关于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神经网络
原文地址:http://blog.csdn.net/acdreamers/article/details/44657439 今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识 ...
- BP神经网络—java实现(转载)
神经网络的结构 神经网络的网络结构由输入层,隐含层,输出层组成.隐含层的个数+输出层的个数=神经网络的层数,也就是说神经网络的层数不包括输入层.下面是一个三层的神经网络,包含了两层隐含层,一个输出层. ...
- 数据挖掘系列(9)——BP神经网络算法与实践
神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...
- bp神经网络及matlab实现
本文主要内容包含: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例 本文以Fisher的Iris数据集 ...
- RBF神经网络和BP神经网络的关系
作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- BP神经网络的公式推导
如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法 BP网络的结构 BP网络的结构如下图所示,分为输入层(Input), ...
- BP神经网络的数学原理及其算法实现
什么是BP网络 BP网络的数学原理 BP网络算法实现 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/44514073 上一篇 ...
- BP神经网络-- 基本模型
转载:http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html BP 神经网络中的 BP 为 Back Propagation 的简写,最早它 ...
- 模式识别之ocr项目---(模板匹配&BP神经网络训练)
摘 要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出 ...
随机推荐
- jquery中的工具方法$.isFunction, $.isArray(), $.isWindow()
本文正式地址:http://www.xiabingbao.com/jquery/2015/07/25/jquery-judge-type 在javascript中对变量类型的判断中,我们讲解了了jqu ...
- APP Inventor 基于网络微服务器的即时通信APP
APP Inventor 基于网络微服务器的即时通信APP 一.总结 一句话总结:(超低配版的QQ,逃~) 1.APP Inventor是什么? google 傻瓜式 编程 手机 app App In ...
- XAMPP apache443端口被占用
点击netstat,可以看到443端口被vmvare占用,那只能改端口了, config,选择Apache(http-ssl.conf)文件,找到443端口,改成其他不被占用的端口,就可以了.
- 河南省多校联盟二-F 线段树+矩阵
---恢复内容开始--- 1284: SP教数学 时间限制: 2 秒 内存限制: 128 MB提交: 24 解决: 4 题目描述 输入 输出 对于每组数据的2操作,输出一行对1e9 + 7取模的答 ...
- Ansible 小手册系列 十二(Facts)
Facts 是用来采集目标系统信息的,具体是用setup模块来采集得. 使用setup模块来获取目标系统信息 ansible hostname -m setup 仅显示与ansible相关的内存信息 ...
- zk的watcher机制的实现
转载:https://www.ibm.com/developerworks/cn/opensource/os-cn-apache-zookeeper-watcher/ http://blog.csdn ...
- 同步锁Lock
用于解决多线程安全问题有三种方式: 同步代码块(隐式锁,基于JVM) 同步方法(隐式锁,基于JVM) 同步锁(显式锁,jdk1.5后出现,相对于前两种方式,更加灵活) 下面通过一段程序来说明一下同步锁 ...
- settings.xml配置文件详解
简单值 一半顶层settings元素是简单值,它们表示的一系列值可以配置Maven的核心行为:settings.xml中的简单顶层元素 < settings xmlns="http:/ ...
- js鼠标键禁用功能
页面完全禁用右键 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- vue浏览器返回监听
具体步骤如下: 1.挂载完成后,判断浏览器是否支持popstate mounted(){ if (window.history && window.history.pushState) ...