说明:20180604更新

1、此文的程序来自博客:http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html

2、本人对其中涉及到的函数进行了详细说明。

3、此程序中部分函数的使用方式是高版本Matlab中不推荐的

文中给出了当前高版本Matlab中的使用方式,并给出了相关博客地址,具体如下:

归一化方式mapminmax :   http://blog.csdn.net/lkj345/article/details/50352385

newff函数的使用: http://www.cnblogs.com/xxfcz/p/4482813.html

4、使用过程中,可能出现的问题

https://blog.csdn.net/ckzhb/article/details/78615712

5、所需的IRIS数据集

https://download.csdn.net/download/ckzhb/10458430

https://github.com/xiaoxiaoxiaohui/Resource/tree/master/水仙花数据集

具体程序如下:

%读取训练数据
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);%特征值归一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]')  ;%构造输出矩阵
s = length( class) ;
output = zeros( s , 3  ) ;
for i = 1 : s output( i , class( i )  ) = 1 ;
end%创建神经网络
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ; %设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 500 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;%开始训练
net = train( net, input , output' ) ;%读取测试数据
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;%仿真
Y = sim( net , testInput ) %统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2[m , Index] = max( Y( : ,  i ) ) ;if( Index  == c(i)   ) hitNum = hitNum + 1 ; end
end
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )

详细说明:

1、文本文件读取函数

textread() 读取文件中数据,%f表示读取单浮点数,按列依次将数据存入f1、f2、f3……。这里f1—f4代表四个特征,class代表每组数据所属的类别。

这里的每列是一个属性/特征的所有输入值,并不是后面函数中输入的一组样本数据。

而在程序中 premnmx、newff、train、tramnmx都是以列的形式输入每组样本数据,故在归一化时需要转置

2、归一化处理函数

premnmx()将原始数据归一化到-1到1之间,该函数在高版本的MATLAB中已被废弃。

[input,minI,maxI] = premnmx(P)

premnmx()对行归一化,故需要将textread读取的原始数据进行转置,此时矩阵P是4行75列的(4个属性,75组训练样本)。

minI,maxI均是4行1列,这两个是为了后面的测试数据的归一化。

input是归一化后的矩阵4行75列。后面神经网络创建的newff函数的第一个参数是一个Rx2的矩阵以定义R个输入向量(即输入层节点个数-输入特征值个数)的最小值和最大值。

推荐使用mapminmax进行归一化:该函数也是对行归一化!!!

http://blog.csdn.net/lkj345/article/details/50352385

https://blog.csdn.net/ckzhb/article/details/72871140

例子:[inputn,setting]=mapminmax(input_train);

3、输出矩阵

%构造输出矩阵
s = length( class ) ;
output = zeros( s , 3  ) ; %zeros(s,3)生成s乘3的全零阵。即75行3列
for i = 1 : soutput( i , class( i )  ) = 1 ;
end

output是75行3列。class矩阵是75行1列,前几列是1,中间是2,最后是3.(即三种花的类型)。数据集中第一种花标记为1,第二种花记为2,第三种花记为3,这样经过循环后,output依然是75行3列,第一列的前几行全为1,第二列的中间几行全为1,第三列的最后几行全为1,其余均为0.

目的是:神经网络输出需要根据类别数量进行一定的处理,有几种类别输出层便含有几个结点,即第一种花输出为[1 0 0],第二种花输出为[0 1 0],第三种花输出为[0 0 1]。这里output每一行对应一组样本的输出类别,通过一个for循环,将所述的类所在的列置为1,此时output是75行3列的。后续train()函数所需的输出标签要求每一列对应一组数据的类别,故后续需要将output转置。

4、神经网络构建

net = newff( minmax(input) ,[10 3] , { 'logsig' 'purelin' } , 'traingdx' )

(此例是老版本的使用http://blog.sina.com.cn/s/blog_64b046c70101cko4.html)

旧版newff函数的格式为:

net=newff(PR,[S1S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:

PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;

Si:第i层神经元个数;

TFi:第i层的传递函数,默认函数为tansig函数;

BTF:训练函数,默认函数为trainlm函数;

traingdx表示学习率自适应并附加动量因子的最速下降法

BLF:权值/阈值学习函数,默认函数为learngdm函数;

PF:性能函数,默认函数为mse函数。

minmax()函数用于获取数组中每一行的最小值和最大值

新版newff函数格式:

net =newff(P,T,[S1 S2...S(N-l)],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF)

例如:net=newff(inputn,output_train,6,{'tansig','purelin'},'traingda');

P和T:输入和输出矩阵;每一列代表一组样本数据。

Si:第i层神经元个数,输出层不用写,根据T决定;

TFi:第i层的传递函数,隐含层默认函数为tansig函数,输出层默认为’purelin’;

BTF:训练函数,默认函数为trainlm函数,表示采用LM法进行训练;

BLF:权值/阈值学习函数,默认函数为learngdm函数;

PF:性能函数,默认函数为mse函数即均方误差。

IPF:指定输入数据归一化函数的细胞数组。

OPF:指定输出数据反归一化函数的细胞数组

DDF:数据划分函数。

(后5个一般用不到)

 旧版本:旧用法训练次数多,但精度高  

新版本:新用法训练次数少,但精度可能达不到要求

造成上述原因是:

程序里面的权值、阈值的初始值是随机赋值的,所以每次运行的结果都会不一样,有好有坏。
你可以把预测效果不错的网络的权值和阈值作为初始值。
具体可以查看net.iw{1,1}、net.lw{2,1}、net.b{1,1}、net.b{2,1}的值。

5、训练函数

net = train( net, input ,output' ) ;

这里input是4行75列,output经转置后是3行75列。

即每组数据是以列的形式输入到构建的神经网络模型,共75组。相应的,输出层与之对应,组数保持一致。

6、测试

Y = sim( net, testInput )

sim仿真,Y是训练好的网络net对输入testInput的实际输出。

若使用mapminmax()函数,测试数据归一化方法为:inputn_test=mapminmax('apply',input_test,setting);

一个简单的BP神经网络matlab程序(附函数详解)相关推荐

  1. 主成分分析(PCA)——matlab程序及函数详解

    参考来源: http://www.cnblogs.com/Hand-Head/articles/5156435.html http://www.matlabsky.com/thread-11751-1 ...

  2. matlab中xcorr函数详解

    Matlab中xcorr函数详解 引言 在matlab中查找相关函数时,找到了xcov函数和xcorr函数,仔细看了帮助文档,发现虽然计算公式不一样,但是两个函数用法相同,计算出的值也相同,于是在翻了 ...

  3. Matlab中 pdist 函数详解

    学习笔记,仅供参考,有错必纠 转载自:Matlab中 pdist 函数详解(各种距离的生成); pdist Pairwise distance between pairs of objects. Sy ...

  4. MATLAB的iptcheckinput函数详解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 iptcheckinput函数详解,这个函数在看 ...

  5. MATLAB的iptchecknargin函数详解

    iptchecknargin函数详解,这个函数在看别人写的M函数时很有用! ipt是image process tools,即图像处理工具的缩写,MALAB里边有一个图像像处理工具箱,里边有一组函数的 ...

  6. MATLAB从入门到精通:搭建一个 简单的Bp神经网络(附代码)

    01 | 构建数据集 构造一个1行1000列的一维矩阵,这1000个数全部都在(0,1)这个区间内.规定当某一列的数字大于等于0.5时,输出为1,否则输出-1.构造数据集的代码如下. %% 构造数据集 ...

  7. 使用python自己搭建一个简单的BP神经网络

    from numpy import exp,array,random,dot #import randomclass NeuralNetwork(object):def __init__(self): ...

  8. 一个简单的BP神经网络例子

    原创文章,转载请说明来自<老饼讲解神经网络>:bp.bbbdata.com 关于<老饼讲解神经网络>: 本网结构化讲解神经网络的知识,原理和代码. 重现matlab神经网络工具 ...

  9. matlab自带SVM算法例子(附函数详解)

    一.程序 SVM理论的学习,见文章:http://blog.csdn.net/ckzhb/article/details/68941695 load fisheriris               ...

最新文章

  1. Spring MVC实现上传文件报错解决方案
  2. 操作系统第四章-文件管理
  3. SAP SHD0的详细简介
  4. TO C AND TO B IN TERMS OF CUSTOMER
  5. C语言标准时间与日期函数
  6. 深度学习面试基础--BN层
  7. 服务器显示器超频,电脑显示器超频怎么恢复正常 电脑显示器超频是什么原因...
  8. 美国大学计算机专业排名 圣地亚哥,U.S.News美国大学计算机专业排名
  9. HDFS数据加密空间--Encryption zone
  10. 点歌机显示歌库服务器未能连接,快速解决常见的六种KTV点歌设备突发故障
  11. 2017东北四省赛G题
  12. 自动驾驶寻找「商业闭环」
  13. macOS SwiftUI 指示器组件规范之 02 评级指标 Rating Indicators
  14. Timeline 时间线基础用法
  15. 微信自定义分享卡片链接的解决方案(可自定义标题 描述 缩列图)
  16. Android Studio中 安卓模拟器不能联网的解决方案
  17. Word文档目录自动生成和页码设置
  18. QML Repeater
  19. 《AutoCAD 2014中文版实用教程》一一1.2 标题栏
  20. php100以内合数,3D须知工具众览:和差对照表 最稳定组合 质合数 和值跨度

热门文章

  1. mysql.8.0.13ZIP安装教程_关于mysql 8.0.13zip包安装方法
  2. 微服务和分布式的区别_大话中台三:中台的搭建,分布式与微服务
  3. 计算机通信基础ppt,计算机网络第2章 数据通信基础知识要点课件.ppt
  4. QDataStream 多余字符的产生原因及消除方法
  5. 清理Visual Studio最近打开的项目、文件、查找内容和最近引用组件
  6. [Hadoop in China 2011] 淘宝OceanBase打造结构化NoSQL数据库
  7. Spring系统学习--20180613:Spring的AOP开发说明
  8. Linux自动解压部署WEB项目脚本
  9. 分享一篇SCCM软件更新的故障排除
  10. 搜索结果红色php,.NET_asp.net搜索匹配关键字为红色显示的代码,首先创建类库 Model (业务实体 - phpStudy...