当前位置:   article > 正文

学习笔记:matlab中各种神经网络与代码DEMO_怎么查看matlab中的所有神经网络算法

怎么查看matlab中的所有神经网络算法

声明:本文部分代码和图文来自《老饼讲解-BP神经网络》:老饼|BP神经网络

好记性不如烂笔头,

这段时间学习了神经网络后,难免有些混乱,这里特地整理和梳理一下matlab中的各种神经网络和简要的DEMO

目录

一.BP神经网络

二.用于做分类的神经网络

2.1.感知机神经网络

2.2.LVQ神经网络

2.3.SOM神经网络

三.用于做数值预测的神经网络

3.1.径向基神经网络RBF

3.2.广义回归神经网络GRNN

3.3.概率神经网络PNN

四、时间序列神经网络

4.1 Elman神经网络


一.BP神经网络


1.1.BP神经网络可以用于做数值预测,也可以用于做分类

bp神经网络是应用最广泛的一种神经网络,它的拓扑结构如下:


做数值预测时的DEMO如下

  1. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  2. x1 = [-3,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,0.9,1.2,1.5,1.8];   % x1:x1 = -3:0.3:2;
  3. x2 = [-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,-2.2204,0.2,0.4,0.6,0.8,1,1.2]; % x2:x2 = -2:0.2:1.2;
  4. y  = [0.6589,0.2206,-0.1635,-0.4712,-0.6858,-0.7975,-0.8040,...
  5.           -0.7113,-0.5326,-0.2875 ,0,0.3035,0.5966,0.8553,1.0600,1.1975,1.2618];    % y: y = sin(x1)+0.2*x2.*x2;
  6. inputData  = [x1;x2];      % 将x1,x2作为输入数据
  7. outputData = y;            % 将y作为输出数据
  8. setdemorandstream(88888);%指定随机种子,这样每次训练出来的网络都一样。
  9. %使用用输入输出数据(inputData、outputData)建立网络,
  10. %隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。
  11. net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');
  12. %设置一些常用参数
  13. net.trainparam.goal = 0.0001;               % 训练目标:均方误差低于0.0001
  14. net.trainparam.show = 400;                  % 每训练400次展示一次结果
  15. net.trainparam.epochs = 15000;              % 最大训练次数:15000.
  16. [net,tr] = train(net,inputData,outputData); % 调用matlab神经网络工具箱自带的train函数训练网络
  17. simout = sim(net,inputData);                % 调用matlab神经网络工具箱自带的sim函数得到网络的预测值
  18. figure;                                     % 新建画图窗口窗口
  19. t=1:length(simout);
  20. plot(t,y,t,simout,'r')                      % 画图,对比原来的y和网络预测的y

用BP神经网络做分类时的DEMO如下

  1. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2012b
  2. load crab_dataset
  3. x = crabInputs; 
  4. t = crabTargets;
  5.  
  6. setdemorandstream(491218382);%指定随机种子,这样每次训练出来的网络都一样。
  7.  
  8. net = patternnet(10);        %建立模式识别网络,隐层设为10个
  9. [net,tr] = train(net,x,t);   %将数据放到网络中训练
  10. plotperform(tr)              %画出训练记录
  11.  
  12. %%用检验数据检验网络的正确率
  13. testX = x(:,tr.testInd);
  14. testT = t(:,tr.testInd);
  15.  
  16. testY = net(testX);
  17. testIndices = vec2ind(testY);
  18.  
  19. %% 画出混淆矩阵,并计算正确率
  20. plotconfusion(testT,testY)
  21. [c,cm] = confusion(testT,testY)  %计算混淆矩阵
  22.  
  23. fprintf('Percentage Correct Classification   : %f%%\n', 100*(1-c));
  24. fprintf('Percentage Incorrect Classification : %f%%\n', 100*c);
  25. figure

二.用于做分类的神经网络


2.1.感知机神经网络


感知机神经网络主要用于做分类,感知机神经网络就是最原始的模型

感知机在matlab中使用newp来创建,DEMO代码如下:

  1. %代码说明:newp的matlab工具箱使用Demo
  2. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  3. %-----------------------------------------------------
  4. % 训练数据
  5. X = [0 0 1 1; 0 1 0 1];
  6. y = [0 1 1 1;];
  7. %训练
  8. net = newp(X,y);             % 建立网络
  9. [net,tr]  = train(net,X,y);  % 训练网络
  10. %预测
  11. py = sim(net,X) %使用网络进行预测


2.2.LVQ神经网络

LVQ神经网络是Kohonen于1989年提出基于竞争网络的学习矢量量化网络,主要用于做聚类。

LVQ就是先随机给一些类别初始化一些判别中心,然后通过调整类别中心,使它们更好地识别训练样本,在训练完成后,就可以将类别中心提取出来,作为类别判别的依据

LVQ神经网络在matlab如下实现

  1. %代码说明:LVQ的matlab工具箱使用Demo
  2. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  3. %-----------------------------------------------------
  4. %数据准备
  5. P = [-3 -2 -2  0  0  0  0 +2 +2 +3; ...
  6.     0 +1 -1 +2 +1 -1 -2 +1 -1  0];     % 输入数据
  7. Tc = [1 1 1 2 2 2 2 1 1 1];            % 输出类别
  8. T = ind2vec(Tc);                       % 将输出转为one-hot编码(代表类别的01向量)
  9. %网络训练
  10. net = newlvq(P,4,[.6 .4]);   % 建立一个LVQ神经网络
  11. net = train(net,P,T);        % 训练神经网络
  12. %预测
  13. Y = sim(net,P);              % 预测(one-hot形式)
  14. Yc = vec2ind(Y);             % 将one-hot编码形式转回类别编号形式


2.3.SOM神经网络


SOM神经网络主要用于做分类,它来源于Kohonen规则聚类,但引入了隐层节点之间的拓扑结构

SOM神经网络在matlab中可以使用solforgmap来创建,它的demo代码如下:

  1. % 本demo展示用matlab工具箱训练一个SOM神经网络
  2. % demo来自matlab2014帮助文档
  3. x   = simplecluster_dataset;  % 加载matlab自带的分类数据
  4. net = selforgmap([8 8]);      % 建立一个SOM神经网络
  5. net = train(net,x);           % 训练网络
  6. view(net)                     % 查看网络
  7. y   = net(x);                 % 用训练好的网络进行预测
  8. classes = vec2ind(y);         % 将预测结果由one-hot格式转为类别索引

三.用于做数值预测的神经网络

3.1.径向基神经网络RBF


径向基神经网络由J.Moody和C.Darken在20世纪80年代末提出,它是一种基于数学原理的神经网络,可以逼近任意曲线

径向基神经网络的本质就是用径向曲线来拼凑出目标曲线

matlab对径向基神经网络提供了两种求解方式:精确求解和OLS求解
精确求解时采用newrbe函数构建网络,OLS求解时使用newrb
两者的区别在于,
(1)newrbe可以0误差,但网络较复杂,模型较大
(2)newrb可以根据目标误差,在newrbe中挑选部分节点来构成网络,所以newrb的模型较小一些

RBF的精确求解可以用newrbe来实现,DEMO代码如下:

  1. %代码说明:径向基newrbe的matlab工具箱使用Demo
  2. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  3. %-----------------------------------------------------
  4. %----数据准备----
  5. x1  = 1:0.2:10;
  6. x2  = -5:0.2:4;
  7. X   = [x1;x2];                % 输入数据,注意中间是分号
  8. Y   = sin (X(1,:))+X(2,:);    % 输出数据
  9. %----网络训练----
  10. net = newrbe(X,Y,2);          % 以X,Y建立径向基网络,径向基的spread=2
  11. simY = sim(net, X);           % 用建好的网络拟合原始数据
  12. %----结果对比----
  13. figure(1);
  14. t = 1:size(Y,2);
  15. plot(t,Y,'*',t,simY,'r')  

RBF的OLS求解可以用newrb来实现,DEMO代码如下:

  1. %代码说明:径向基newrb的matlab工具箱使用Demo
  2. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  3. %-----------------------------------------------------
  4. %----数据准备----
  5. x1  = 1:0.2:10;
  6. x2  = -5:0.2:4;
  7. X   = [x1;x2];              % 输入数据,注意中间是分号
  8. Y   = sin (X(1,:))+X(2,:);  % 输出数据
  9. %----网络训练----
  10. net = newrb(X, Y, 0, 2);    % 以X,Y建立径向基网络,目标误差为0,径向基的spread=2
  11. simY = sim(net, X);         % 用建好的网络拟合原始数据
  12. %----结果对比----
  13. figure(1);
  14. t = 1:size(Y,2);
  15. plot(t,Y,'*',t,simY,'r')  


3.2.广义回归神经网络GRNN

广义回归神经网络GRNN全称为(General Regression Neural Network)
它由美国Donald F.Specht于1991年提出,是一种基于非线性的回归理论的神经网络

广义回归也是使用径向网络来构成,只是它与RBF的原理出发点不同

广义回归神经网络在matlab中可以使用 newgrnn来实现

  1. %代码说明:径向基newgrnn的matlab工具箱使用Demo
  2. %来自《老饼讲解神经网络》bp.bbbdata.com ,matlab版本:2014b
  3. %-----------------------------------------------------
  4. %----数据准备----
  5. x1  = 1:0.2:10;
  6. x2  = -5:0.2:4;
  7. X   = [x1;x2];                % 输入数据,注意中间是分号
  8. Y   = sin (X(1,:))+X(2,:);    % 输出数据
  9. %----网络训练----
  10. net = newgrnn(X,Y);           % 网络建立与训练
  11. simY = sim(net, X);           % 用建好的网络拟合原始数据
  12. %----结果对比----
  13. figure(1);
  14. t = 1:size(Y,2);
  15. plot(t,Y,'*',t,simY,'r')  

3.3.概率神经网络PNN

概率神经网络全称为Probabilistic Neural Network
它由D.F.Speeht在1989年提出,是径向基网络的一个分支
它与广义神经网络类似,但概率神经网络仅用于模式识别(分类)

在matlab中,概率神经网络可用newpnn来实现,DEMO代码如下

  1. % 训练数据
  2. P = [1 2 3 4 5 6 7]; % 输入数据
  3. Tc = [1 2 3 2 2 3 1]; % 输出数据:类别编号
  4. T = ind2vec(Tc); % 将类标转换为onehot编码格式
  5. %设计一个PNN神经网络,并测试
  6. net = newpnn(P,T); % 生成一个概率神经网络
  7. Y = sim(net,P) % 用网络进行预测
  8. Yc = vec2ind(Y) % 将预测结果转为类别编号


四、时间序列神经网络

4.1 Elman神经网络

Elman神经网络是 J. L. Elman于1990年提出的一种用于时序的神经网络,也就是后世所称的RNN神经网络

ELMAN神经网络就是三层BP神经网络,但它每次会把上一时刻的隐节点当作当前时刻的输入

这是序列数据的特有模型

ELman神经网络在matlab中可以用newelm来实现,DEMO代码如下:

  1. % 本代码展示如何用matlab训练一个Elman神经网络
  2. % 代码主旨用于教学,供大家学习理解如何用matlab训练一个Elman神经网络
  3. % 转载请说明来自 《老饼讲解神经网络》 bp.bbbdata.com
  4. % 生成输入输出数据
  5. X = -5:0.3:5;                                         % 用于训练网络的输入数据
  6. y = sin(X);                                           % 用于训练网络的输出数据
  7. rand('seed',408);                                     % 指定随机种子,这样每次训练出来的网络都一样。
  8.                                                      
  9. net  = newelm(X,y,6,{'tansig','purelin'});            % 新建一个elman网络
  10. net.trainparam.goal     = 0.00001;                    % 设置训练目标
  11. net.trainparam.epochs   = 2000;                       % 设置最大训练次数.
  12. % ----------网络训练---------------
  13. % 在训练时一定要将数据转为序列数据,
  14. % 如果是矩阵格式,工具箱会认为每个数据是独立的
  15. Xseq = con2seq(X);                                    % 将输入转成序列格式
  16. Yseq = con2seq(y);                                    % 将输出转成序列格式
  17. [net,tr] = train(net,Xseq,Yseq);                      % 将输入输出数据进行训练
  18. % ----------网络预测---------------
  19. % 注意,在预测时也必须传入序列数据,
  20. % 如果传入矩阵格式,工具箱会认为只是一个时刻的数据,而不是多个时刻的数据,
  21. % 也就是说,网络会对每个数据进行独立预测,它不会把上个数据的隐节点作为延迟输入传给下个数据
  22. py = sim(net,Xseq);                                   % 用训练好的网络进行预测,
  23. py  = cell2mat(py)                                    % 将预测结果转为矩阵格式
  24. plot(X,y,X,py,'*')
  25. legend('原始数据','预测结果')

整理不易,望点赞~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/105736
推荐阅读
相关标签
  

闽ICP备14008679号