BP神经网络之MATLAB@GUI篇
来源:互联网 发布:excel数据列表创建列表 编辑:程序博客网 时间:2024/06/05 18:27
设计BP神经网络方法
使用BP神经网络解决问题时,需要一个训练数据集,此外还需要确定以下参数:
(1)网络层数
BP网络可以包含1到多个隐层,单隐层前馈网络已具有很大的学习。因此对于大部分场合,单个隐层即可满足需求。面对大数据,从增加模型复杂度角度来说,增加隐层数目比增加隐层神经节点数更有效,因为增加隐层数目不仅增加了拥有激活函数的神经元数目,还增加了记过函数嵌套的层数。但随着隐层数目增加,网络收敛难度加大,传统BP算法很难实现。
(2)输入层节点数、输出层节点个数
输入层节点数取决于输入向量的维数、输出层节点数取决于目标结果。实际应用时,首先应将问题提炼出向量模型用于表述输入、输出。
(3)隐含层节点数
隐含层节点数的选择对网络影响很大,数目较多会带来更好的性能,但训练难度也会变大,一般采用经验公式估计节点数,例如:
a.M = 根号下(n+m)+a,n、m分别为输入层、输出层神经元个数,a是0到10之间常数
b.M = log2(n),n为输入层神经元个数
(4)传递函数选择
一般隐含层使用Sigmoid函数,而输出层使用线性函数。如果输出层也采用Sigmoid函数,则输出结果为[0,1]或[-1,1]。
(5)训练函数选择
针对不同类型问题,选择不同训练函数。例如对于包含数百个权值的回归问题,LM收敛速度快,误差小。但LM占用内存大,模式识别问题处理能力弱,RPROP是更好的选择。(MATLAB中所有训练函数在后文列出)
(7)初始权值赋值
参数的初始值对训练过程有着重大的影响。对参数初始化的原则是:参数应该随机初始化在能让sigmoid函数在线性区域激活的值。如果参数全部都很大,那sigmoid一开始就饱和了,这样就会得到一个非常小的梯度值,那参数更新就会很慢,训练也会很慢。如果参数太小了,那梯度也会很小,同样也会导致训练很慢。
下面进入正题:MATLAB为BP神经网络的使用提供强大的仿真工具,除了一些函数外,更直观、简单的就是GUI的使用,简化了众多参数的设定,使得设计、仿真过程更加简单。
在命令界面输入nnstart命令
有四个选项,分别解决不同问题:
(1)回归问题
(2)归类问题(监督学习)
(3)聚类问题(非监督学习)
(4)非线性时间序列问题
此外,GUI界面的BP网络隐含层只有1层,不能修改。
选择Fitting app
接下来是输入数据,可以选择自己已经导入工作空间的数据,或者使用load example data set导入matlab的一些默认实验数据,我这里选择bodyfat,根据人体的年龄、身高、体重等个13个输入信息预测肥胖系数。输入数据大小13*253,输出数据大小1*253。
接下来是训练数据、修正数据、测试数据的比重。修正数据的作用是对训练结果作一定调整,提升泛化能力,防止过拟合,GUI内训练数据比重是不能调整的,其他两个可以。
选择隐含层神经元结点数(默认为10)。
选择训练方法,提供了3种方式,默认为LM算法。
此外,MATLAB提供了多种数据训练方式,在CODE模式下均可使用。LM算法训练数据通常是最快的,同样BFGS quasi-Newton算法速度也很快;但当数据规模较大时,这两种算法由于占用内存较大效率较低,此时SCG(分类问题)和RP算法是更好的选择;当数据规模较小且包含噪声时,可以选择BR算法。
有关这些学习算法的详细对比可以在matlab中搜索Choose a Multilayer Neural Network Training Function
训练完毕后,可以绘制回归曲线还有误差直方图。
回归曲线描述了网络对训练数据、修正数据、测试数据的拟合能力,理想情况下45°直线代表输出和目标完全相同。
误差直方图描述了不同误差对应点数的分布情况。可以根据直方图对数据做一些评价,例如:
(1)如果部分训练数据(占比很少)偏离中心较多,则可认为这部分数据可能是有错误的
(2)如果修正数据大部分集中在边缘,则说明原数据的过于重复,不具备泛化能力,可能需要添加更多数据,重新训练
如果对以上评价结果不满意的话,可以重新训练,调整学习方法,增加隐层节点数,增加数据量等。
最后可以将GUI做所的事情转换为代码,方便阅读:
Generate Scripts是将GUI执行命令转换为代码,方便学习相应的函数。
Generate Scripts产生的代码如下:
% This script assumes these variables are defined:%% bodyfatInputs - input data.% bodyfatTargets - target data.x = bodyfatInputs;t = bodyfatTargets;% Choose a Training Function% For a list of all training functions type: help nntrain% 'trainlm' is usually fastest.% 'trainbr' takes longer but may be better for challenging problems.% 'trainscg' uses less memory. NFTOOL falls back to this in low memory situations.trainFcn = 'trainlm'; % Levenberg-Marquardt% Create a Fitting NetworkhiddenLayerSize = 10;net = fitnet(hiddenLayerSize,trainFcn);% Setup Division of Data for Training, Validation, Testingnet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100;% Train the Network[net,tr] = train(net,x,t);% Test the Networky = net(x);e = gsubtract(t,y);performance = perform(net,t,y)% View the Networkview(net)
执行一下Generate Scripts代码,得到:
Algorithms中描述了数据分组方式、训练方法以及评级函数。Process中描述了迭代次数、耗费时间、修正次数、初始误差/结束误差、初始梯度/结束梯度等。其中可以设置最大迭代次数、最小误差、最小梯度都可以作为训练神经网络的结束条件,在CODE模式都可以执行。
用CODE执行的好处在于可以查看迭代过程中误差、梯度等变化情况,例如误差图:
如有问题,敬请指正~
- BP神经网络之MATLAB@GUI篇
- matlab神经网络之BP网络
- Matlab之BP神经网络反向传播算法
- Matlab BP神经网络之validation checks
- BP神经网络算法之matlab具体实现
- MATLAB BP神经网络算法
- Matlab实现BP神经网络
- matlab实现BP神经网络
- matlab BP神经网络介绍
- matlab中的BP神经网络
- BP神经网络 MATLAB源程序
- matlab BP神经网络
- BP神经网络matlab实现
- Matlab BP神经网络使用方法
- matlab BP神经网络分类
- BP神经网络 MATLAB源程序
- MATLAB实现BP神经网络
- matlab BP神经网络学习
- 应用集成实战系列:服务总线中的同步业务交互模式
- STM32学习笔记2——再探GPIO
- cifar数据集介绍及到图像转换的实现
- bzoj 2286 [Sdoi2011]消耗战 虚树
- 最大公约数与最小公倍数
- BP神经网络之MATLAB@GUI篇
- Scala安装与语言基础语法笔记
- 基于进程的并发编程
- 处理百万级以上的数据提高查询速度的方法
- 实现字符串的复制功能
- sdut oj4-2 电子时钟中的运算符重载
- 树莓派驱动6轴传感器MPU6500与SPI初体验(三) -串口姿态显示
- Java正则表达式规则
- 201612102012