找回密码
 注册
Simdroid-非首页
查看: 160|回复: 6

BP网络的训练误差小但是预测误差大

[复制链接]
发表于 2010-9-11 21:54:46 | 显示全部楼层 |阅读模式 来自 湖南长沙
本帖最后由 starbinbin_csu 于 2010-9-11 21:57 编辑

首先一段BP做函数拟合代码如下:
  1. function BP()
  2. %% 数据处理
  3.     clear;clc
  4.     load 平头圆柱体数据 ;
  5.     input=[v_cal1;v_cal11];
  6.     output=[v1;v11];
  7.     k=rand(1,152);
  8.     [m,n]=sort(k);
  9.     input_train=input(n(1:100),:)';
  10.     output_train=output(n(1:100),:)';
  11.     input_test=input(n(101:152),:)';
  12.     output_test=output(n(101:152),:)';
  13.    
  14.     %训练数据归一化
  15.     [inputn,inputps]=mapminmax(input_train);
  16.     [outputn,outputps]=mapminmax(output_train);

  17. %% BP神经网络的构建与训练
  18. % %初始化网络结构
  19. net=newff(inputn,outputn,5);

  20. net.trainParam.epochs=1000;
  21. net.trainParam.lr=0.1;
  22. net.trainParam.goal=0.01;

  23. %网络训练
  24. net=train(net,inputn,outputn);

  25. %% BP网络预测
  26. %预测数据归一化
  27. inputn_test=mapminmax('apply',input_test,inputps);

  28. %网络预测输出
  29. an=sim(net,inputn_test);

  30. %网络输出反归一化
  31. BPoutput=mapminmax('reverse',an,outputps);

  32. %% 结果分析

  33. figure(1)
  34. plot(BPoutput,':og')
  35. hold on
  36. plot(output_test,'-*');
  37. legend('预测输出','期望输出')
  38. title('BP网络预测输出','fontsize',12)
  39. ylabel('函数输出','fontsize',12)
  40. xlabel('样本','fontsize',12)
  41. %预测误差
  42. error=BPoutput-output_test;


  43. figure(2)
  44. plot(error,'-*')
  45. title('BP网络预测误差','fontsize',12)
  46. ylabel('误差','fontsize',12)
  47. xlabel('样本','fontsize',12)

  48. figure(3)
  49. plot((output_test-BPoutput)./BPoutput,'-*');
  50. title('神经网络预测误差百分比')

  51. errorsum=sum(abs(error))
  52. end
复制代码
有兴趣的可以运行一下,为什么预测误差这么大啊?有什么办法可以减小误差吗?相关数据如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-9-12 08:26:03 | 显示全部楼层 来自 福建福州
Simdroid开发平台
我以前也碰到过这样的情况,神经网络的泛化能力很差。调了好长时间也没什么改善,:'(

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-9-12 16:24:36 | 显示全部楼层 来自 北京
今年的数学建模竞赛题目?
如果是的话我想这个题目使用神经网络还是不太合适,预测结果误差大我想是因为输入和输出的关系和神经网络内部结构并不类似。如果不是这个题目,那么就拉倒算我没说。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-9-12 16:39:35 | 显示全部楼层 来自 河北廊坊
我觉得可能是泛化能力太弱的问题
另一方面,一般的外插效果都不好,所以你确定是不是外插
回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-12 17:04:35 | 显示全部楼层 来自 湖南长沙
本帖最后由 starbinbin_csu 于 2010-9-12 17:05 编辑

3# feynmand
确实是今年的数模题目。。。
这些是实验数据,后来发现有两组训练数据取错了(顺序反了),使得整体的数据没有什么特点了,后来将数据改过来了,误差就在理想范围内了~~

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-9-12 19:02:00 | 显示全部楼层 来自 北京
为什么没有用积分直接计算?

我想到过另一个办法,蒙特卡罗,就像用蒙特卡罗算圆周率那样算。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-12 21:57:42 | 显示全部楼层 来自 湖南长沙
6# feynmand
我是用积分进行计算,在计算验证的时候发现与实际数据存在一定的误差,说明容器不是严格的圆柱体(当然还有其他因素),然后用BP网络对标定数据进行修正,使其更为接近实际值
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 19:27 , Processed in 0.042248 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表