转载——关于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摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出 ...
随机推荐
- 十七 Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理
网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认是深度优先的 广度优先 是以层级来执行的,(列队方式实现)
- Spoj-COINS-记忆化dp
COINS - Bytelandian gold coins #dynamic-programming In Byteland they have a very strange monetary sy ...
- Pandas:时间数据的季节分析
最近在做论文的数据处理,涉及到不同年份不同季节的分析.另外还要求不同季节的数据可以单独分析. 其实思路还是比较简单的,那就在原始数据中增加一栏:季节 2013-05-21 Aotizhongxin 1 ...
- 分布式锁tair redis zookeeper,安全性
tair分布式锁实现:https://yq.aliyun.com/articles/58928 redis分布式锁:https://www.cnblogs.com/jianwei-dai/p/6137 ...
- laravel中设置表单的方式,以及获取表单的提交的数据
- 【javascript基础】 JavaScript defer和async区别
defer该属性用来通知浏览器,这段脚本代码将不会产生任何文档内容.例如 JavaScript代码中的document.write()方法将不会骑作用,浏览器遇到这样的代码将会忽略,并继续执行后面的代 ...
- QT帮助文档 英文
http://doc.qt.io/archives/qtquick-components-symbian-1.1/qml-button.html
- redis安装配置记录
环境:CentOS7,最小化安装 安装gcc wget # yum upgrade # yum install gcc # yum install wget 下载并安装redis # wget htt ...
- Android学习笔记①——安卓工具的基本安装
安卓已经出来很长时间了,网上的教程也有很多,怕以后忘记,就把网上大牛们的分享的知识自己在学习一下,也记录一下,如果能帮到别人,那是更好不过的! 鉴于现在的IDE工具来说,IDEA已经占据了java的半 ...
- PriorityBlockingQueue用法
摘自<Java编程思想> package com.test.concurrency; import java.util.ArrayList; import java.util.List; ...