当前位置:   article > 正文

matlab实现BP神经网络(完整DEMO)_matlabbp神经网络工具箱教程

matlabbp神经网络工具箱教程

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com


目录

一、BP神经网络Demo代码   

1.1 代码整体思路

1.2 BP神经网络Demo代码

二、运行结果   

2.1 拟合曲线  

2.2训练误差与预测误差

三、相关文章

3.1-BP的入门学习目录:老饼|BP神经网络-入门教程

3.2-BP的建模应用目录:老饼|BP神经网络-建模应用

3.3-不调用工具箱自实现BP神经网络:老饼|BP神经网络-BP算法重现


本文展示一个日常使用BP神经网络时用于参考的代码DEMO模板


一、BP神经网络Demo代码   

这里提供一个相对全面的DEMO作为模板,
方便日常使用BP神经网络时复制

1.1 代码整体思路

代码整体思路如下
1、生成数据                                                                                                   
2、设置一个三层的BP网络,并将隐节点设为3                                                
3、训练网络                                                                                                  
4、网络效果评估                                                                                           
(1) 打印训练数据、测试数据的平均绝对误差、平均绝对误差占比         
(2) 绘制训练数据、测试数据的拟合效果                                              
5、使用训练好的网络对数据进行预测                                                             

1.2 BP神经网络Demo代码

具体代码如下(matlab2018a亲测已通过)

  1. clear all;
  2. close all ;
  3. %================原始数据====================
  4. x1 = linspace(-3,3,100);                                                  % 在[-3,3]之间线性生成100个数据
  5. x2 = linspace(-2,1.5,100);                                                % 在[-2,1.5]之间线性生成100个数据
  6. X  = [x1;x2];                                                             % 将x1,x2作为输入数据
  7. y1 = 10*sin(x1)+0.2*x2.*x2;                                               % 生成y1
  8. y2 = 10*sin(x2)+0.2*x1.*x1;                                               % 生成y2
  9. y  = [y1;y2];                                                             % y里包含两个输出y1,y2
  10. setdemorandstream(88);                                                    % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
  11. %==============网络训练 ============================
  12. %使用用输入输出数据(X,y)建立网络,
  13. %隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。
  14. net = newff(X,y,3,{'tansig','purelin'},'trainlm');
  15. %设置一些常用关键参数
  16. net.trainparam.goal        = 0.00001;                                     % 训练目标:均方误差低于0.0001
  17. net.trainparam.show        = 400;                                         % 每训练400次展示一次结果
  18. net.trainparam.epochs      = 15000;                                       % 最大训练次数:15000.
  19. net.divideParam.trainRatio = 0.7;                                         % 用于训练的数据比例
  20. net.divideParam.valRatio   = 0.15 ;                                       % 用于验证过拟合的数据比例
  21. net.divideParam.testRatio  = 0.15;                                        % 用于比例
  22. net.trainparam.max_fail    = 6;                                           % 过拟合验证失败次数
  23. [net,tr,net_y] = train(net,X,y);  % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回
  24. % ===========网络效果评估==================================
  25. % 提取训练数据与测试数据                                                
  26. train_net_y = net_y(:,tr.trainInd);                                       % 训练数据的预测值
  27. test_net_y  = net_y(:,tr.testInd);                                        % 测试数据的预测值
  28. train_y     = y(:,tr.trainInd);                                           % 训练数据的真实值
  29. test_y      = y(:,tr.testInd);                                            % 测试数据的真实值
  30. % 计算误差                                                              
  31. train_err      = mean(abs(train_net_y(:)-train_y(:)))                     % 训练数据的误差
  32. test_err       = mean(abs(test_net_y(:)-test_y(:)))                       % 测试数据的误差
  33. train_err_rate = mean(abs((train_net_y(:)-train_y(:))./train_y(:)))       % 训练数据的误差比
  34. test_err_rate  = mean(abs((test_net_y(:)-test_y(:))./test_y(:)))          % 测试数据的误差比
  35. % 绘制拟合曲线图
  36. figure
  37. [out_size,sample_num] = size(y);  % 输出的个数,样本个数
  38. for i = 1 : out_size
  39.     % 绘制训练数据第i个输出的拟合效果
  40.     subplot(out_size,2,(i-1)*2+1);
  41.     title(['训练数据-第',num2str(i),'个输出的拟合效果'])
  42.     hold on 
  43.     plot(1:size(train_y,2),train_y(i,:),'b')
  44.     plot(1:size(train_net_y,2),train_net_y(i,:),'r')
  45.     % 绘制测试数据第i个输出的拟合效果
  46.     subplot(out_size,2,(i-1)*2+2);
  47.     title(['测试数据-第',num2str(i),'个输出的拟合效果'])
  48.     hold on 
  49.     plot(1:size(test_y,2),test_y(i,:),'b')
  50.     plot(1:size(test_net_y,2),test_net_y(i,:),'r')
  51. end 

%=============网络对新输入的使用==========================
sim_y = sim(net,X);               % 实际与上面的net_y一致
以上就是一个完整的matlab实现BP神经网络Demo代码了
 使用时主要修改的有方法
 

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