数学建模社区-数学中国

标题: BP神经网络程序问题求助 [打印本页]

作者: T-Eric    时间: 2014-7-18 21:13
标题: BP神经网络程序问题求助
这是我从书上打下来的代码,因为书的运行软件版本比较低,我的是Malab2013a的版本,所以我修改了部分程序,但运行出来有问题。请哪位高手帮忙指教和修正一下。谢谢!!
: c) X# l: }' M8 {& K* w
! D% b1 _! u! ~* o+ z%原始数据输入# ^0 Y, Q" ]) E
clc
3 j3 s( F7 p! d* U7 Csqrs=[20.55,22.44,25.73,27.13,29.45,30.1,30.96,34.06,36.42,38.09,39.13,39.99,...
0 n/ n, f: e5 d. `. R  r    41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];
# t1 Y7 Y  _7 b" p1 Dsqjdcs=[0.6,0.75,0.85,0.90,1.05,1.35,1.45,1.60,1.70,1.85,2.15,2.20,2.25,2.35,...* B5 |' j6 J5 r0 |) Y
    2.5,2.6,2.7,2.85,2.95,3.10];
' _* t8 d; k3 g- ~$ nsqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49,...
! J1 H9 Q# A' f0 j) g3 Z# M    0.56,0.59,0.59,0.67,0.69,0.79];( `) W' d1 x1 O8 K' v, C
glkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433,...
, A0 r: P- d+ q, K    22598,25107,33442,36836,40548,42927,43462];
; o8 x  {" ?8 Y# i8 cglhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115,...
9 V; O- K( |* p% \# V# x1 A% @    13320,16762,18673,20724,20803,21804];
; @, D( Q- I& o# E7 Xp=[sqrs;sqjdcs;sqglmj];
9 z. e; b# E7 U, l, |8 k, B0 at=[glkyl;glhyl];5 B# D0 o3 D5 r" y2 I# D
9 |* z; j) D, K2 [
%数据归一化5 L; l  W9 a7 C% H( l
[pn,ps1]=mapminmax(p);/ H0 k8 z; M) F; l0 E
[tn,ps2]=mapminmax(t);
7 v. I0 o, m6 Y) ndx=[-1,1;-1,1;-1,1];- y& E7 b5 Y* ~0 d- W: T

( Y" G5 L5 n8 R# m3 W%BP网络训练7 r4 a2 {  }' N1 y6 Q  C4 U
net=newff(p,t,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
" T  G# b" ]; V% ?8 Y. Wnet.trainParam.show=1000;
- E$ \2 M( H% X" G+ G7 lnet.trainParam.Lr=0.05;
; W% g$ a3 `& ^8 P6 |net.trainParam.epochs=50000;
0 o- Y/ C) \6 H+ Y2 f+ l4 W2 @+ |net.trainParam.goal=0.65*10^(-3);
* n; a8 N8 f: z) z' E$ dnet=train(net,pn,tn);" Z& t, t& t3 j9 P

- y  X+ c# f* F%利用原数据对BP网络仿真
. d. K! ]4 x4 C) kan=sim(net,pn);9 o5 g9 E* k5 E* q. k" i
a=mapminmax('reverse',an,ps2);
: N* r3 Q, |# H; ]/ _% b8 J. c% x3 e6 S" M5 i% w
%仿真结果与原数据对比测试
" h* W! ^9 h$ n8 [x=1990:2009;
5 Y; H  D$ T2 p; p% D) _" u0 ?newk=a(1,:);, e4 P" u7 d* G
newh=a(2,:);5 _. C, t+ M2 t% D
figure(2);& f$ m+ O, g# ^" ]0 S; t$ O
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+');
, T2 N1 n4 O2 U# r2 `6 F( y: Z0 B2 llegend('网络输出客运量','实际客运量');
' S9 o( q  m) O" M9 V& D  @5 axlabel('年份');ylabel('货运量、万人');
* n! K; H5 Q% L' D0 b+ Htitle('运用工具箱客运量学习和测试对比图');9 z7 @; i5 \  _- f( S: q1 B
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+');
* t  E) B( w5 \" zlegend('网络输出货运量','实际货运量');
$ E- H5 a# o8 D  ]9 mxlabel('年份');ylabel('货运量、万吨');
) T+ q9 a# ?! {! C) Y, u# Htitle('运用工具箱货运量学习和测试对比图');% j5 b' e8 Z7 t% b3 V; U

7 n/ {7 ^9 h1 ]0 w& W1 A%新数据仿真
9 X0 Z  W7 R& y* D9 p" ^pnew=[73.39,75.55: J$ C: V( ^! D. [  \
    3.9635,4.0975/ G+ M* ?4 z2 X/ N
    0.9880,1.0268];
# `+ w  J( N$ [; \pnewn=mapminmax('apply',pnew,ps1);6 k9 Z; ]& X$ S3 i; m
anewn=sim(net,pnewn);
8 q# H3 O  r2 y8 n/ Z' Xanew=mapminmax('reverse',anewn,ps2)
+ a& z2 Q% a# I+ k" i$ V0 H1 x3 K& m; G# X- p* T  r! {7 ?. r

`VCWMZD9E$D~NHRR~AT9B4D.jpg (120.2 KB, 下载次数: 546)

`VCWMZD9E$D~NHRR~AT9B4D.jpg


作者: gancm    时间: 2014-7-19 12:30
看了图我感觉是网络输出后面那几个值太大了,前面基本都是一条水平线了,具体哪里还看不出问题。你把修改的地方说一下看看
作者: 529084167    时间: 2014-7-21 09:35

作者: T-Eric    时间: 2014-7-21 11:58
gancm 发表于 2014-7-19 12:30 9 s  l) P! [8 M/ T3 s' ?9 l5 Q' Q# {; v
看了图我感觉是网络输出后面那几个值太大了,前面基本都是一条水平线了,具体哪里还看不出问题。你把修改的 ...
( J/ d. S8 A) ^# h
因为版本更新,Matlab中的Newff命令用法有所改变,原命令为:( B& Q8 f3 l  ?/ ?! @
net=newff(dx,[3,7,2]{'tansig','tansig','purelin'},'traingdx');
5 b' E" B4 h  A我修改为:: t. |/ D2 b- ]1 M, Q3 S
net=newff(p,t,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
, s3 |+ O" w- e: @" P4 s1 c然后有些命令被其他命令替代了,其中有premnmx,postmnmx,tramnmx命令好像被替换了,使用了一个强大的命令mapminmax。原命令为:% F  X& \" @" l5 x: U; i
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
( d5 ]+ Y- U! K! J# ma=postmnmx(an,mint,maxt);% T6 ^# j7 n) {+ u
pnewn=tramnmx(pnew,minp,maxp);
% \/ f9 t2 R3 i' i& }) Manew=postmnmx(anewn,mint,maxt)# k& _! W8 W+ U# f: e- ^$ o7 S
我修改为:& `' X' R+ X2 L1 |
[pn,ps1]=mapminmax(p);[tn,ps2]=mapminmax(t);% v4 b1 e9 h/ O/ E
a=mapminmax('reverse',an,ps2);/ f/ l( M" Q# Y7 U2 d7 c1 q) d
pnewn=mapminmax('apply',pnew,ps1);: V5 ?0 v9 n7 C0 `  x
anew=mapminmax('reverse',anewn,ps2)
6 @7 [; g# f. L" o. g& q% |, x$ o6 s' R& @
原程序为:
6 |9 ]! P# d3 }7 G: _%原始数据输入
3 ^% m; E. I9 Z2 E3 @* Mclc
$ h. x- x1 r6 @6 Y2 _sqrs=[20.55,22.44,25.73,27.13,29.45,30.1,30.96,34.06,36.42,38.09,39.13,39.99,...
  C8 t( B% f4 E$ I' O. r% I$ }    41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];/ `! u9 N4 C* C) l8 c3 @7 V
sqjdcs=[0.6,0.75,0.85,0.90,1.05,1.35,1.45,1.60,1.70,1.85,2.15,2.20,2.25,2.35,...1 D( ?) d! w+ Q5 k3 U, Q/ ~
    2.5,2.6,2.7,2.85,2.95,3.10];6 E  X! f/ }0 `) K. p3 I
sqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49,...5 X5 R9 m7 G; T! A. D
    0.56,0.59,0.59,0.67,0.69,0.79];4 p7 h* ^0 ?" J, ~0 ~! i
glkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433,...8 h$ ^& Y8 ], j
    22598,25107,33442,36836,40548,42927,43462];
' K" ^8 X- v9 m( _. Rglhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115,...- G% X- Y& x7 f- U1 k! Y
    13320,16762,18673,20724,20803,21804];2 i/ v. s$ s  \: L
p=[sqrs;sqjdcs;sqglmj];
& F9 o/ r1 V, E7 X& {; a% mt=[glkyl;glhyl];4 v  L: n+ [, _9 }/ A7 e: T

6 I" A) `4 Y; N- }0 ]%数据归一化
$ _8 z. L2 O2 M, q0 Q[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);& P8 k2 {3 _8 N0 B9 u. `2 E
dx=[-1,1;-1,1;-1,1];
$ d7 d/ k5 p7 ?, o/ w5 `
- H. O: [* g3 T+ O- b! {
%BP网络训练! R$ O: @1 Y, `! F1 P! l
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
+ l+ }7 O9 s( J4 |net.trainParam.show=1000;
! E6 [! y8 k2 ~( _net.trainParam.Lr=0.05;5 f$ @. l1 k" a( r
net.trainParam.epochs=50000;
. |4 r8 F. l8 J$ @7 I. _net.trainParam.goal=0.65*10^(-3);2 d+ E% Y% r: y% H' |
net=train(net,pn,tn);
4 E# b7 B( m. B4 {
' T7 Z4 h% r* o9 j8 G3 p6 ]5 [%利用原数据对BP网络仿真
- x3 `6 n+ u: r# b! B( Y& u, Van=sim(net,pn);
( T) P; \9 j+ r& }% _2 h/ Z. ea=postmnmx(an,mint,maxt);; H6 w3 i. B/ r1 s# c0 x; O
/ `: H* Q6 H1 s1 K5 n& a9 K5 K
%仿真结果与原数据对比测试, @0 f1 r. E+ ]" R" g
x=1990:2009;
' E& b2 c: K- Mnewk=a(1,;
1 k; L5 e) M+ e! H5 hnewh=a(2,;# b; N3 u  Z& g( n
figure(2);0 M+ T; w9 E0 u8 Q% V; x' _2 y
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+');2 I, x( ~( L1 _
legend('网络输出客运量','实际客运量');
# k( W+ e- F: i, d/ Kxlabel('年份');ylabel('货运量、万人');
! \- ]* W  Q8 @2 Jtitle('运用工具箱客运量学习和测试对比图');( `2 P# j  N, z* a2 J! X9 i. c) u
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+');$ i, C' m" V* m% j( @
legend('网络输出货运量','实际货运量');& y' }! _+ E% c
xlabel('年份');ylabel('货运量、万吨');
8 R5 d1 r1 w* S2 ntitle('运用工具箱货运量学习和测试对比图');
8 C: i. I. q  n7 Q
4 q2 y1 z( V/ I* n%新数据仿真
# O  I( v+ F! i2 r+ f, Opnew=[73.39,75.55
- ~* Z2 T0 ~& Z* ?) ~* A% p    3.9635,4.0975
, H0 C: \* n1 Y8 {1 j    0.9880,1.0268];. [; }! _$ N/ q. ~- Y# N& r% e
pnewn=tramnmx(pnew,minp,maxp);6 c- c& K8 `4 m9 l7 y) v
anewn=sim(net,pnewn);2 z2 M- f# S  U. }
anew=postmnmx(anewn,mint,maxt)

! w* S! X% T% Q& o' i, _# ^) H: u& g4 _( d0 Y: @0 K! e  P
修改后程序为:. Q, U5 }) ^& |* R4 P
%原始数据输入( r6 ^5 d$ D7 g
clc
0 X. D+ o0 r0 X% _8 Zsqrs=[20.55,22.44,25.73,27.13,29.45,30.1,30.96,34.06,36.42,38.09,39.13,39.99,...
+ n) {# v" B6 Z# |% E/ y4 D    41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];
; d8 b. P. w9 B4 a+ k9 ^sqjdcs=[0.6,0.75,0.85,0.90,1.05,1.35,1.45,1.60,1.70,1.85,2.15,2.20,2.25,2.35,...
: K" i+ ^6 h) Q" x    2.5,2.6,2.7,2.85,2.95,3.10];3 `+ d6 B) @& z8 @7 N$ G# n
sqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49,...  b5 Q: o9 O. O* i3 Y; Q' n- S" N
    0.56,0.59,0.59,0.67,0.69,0.79];
+ w+ ]- o0 P; J" m2 Gglkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433,...% q, {1 V5 G1 k% Y7 s
    22598,25107,33442,36836,40548,42927,43462];' q/ F+ e  s/ b: I& Q/ [0 j9 u
glhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115,...' S4 w: w) i( A- r* p! Q7 {, Y
    13320,16762,18673,20724,20803,21804];) x  f7 s( a3 H4 l& h9 T
p=[sqrs;sqjdcs;sqglmj];4 m8 o/ Y3 T5 V$ J
t=[glkyl;glhyl];
0 U; O, r- D/ p6 T& N
. ~% w6 b; z7 O5 L%数据归一化* Q, h6 ?  e. E) r9 q
[pn,ps1]=mapminmax(p);
/ T, J: v' ^5 U# l1 u5 R2 J[tn,ps2]=mapminmax(t);# I3 x' j0 v5 B0 A* ]

& Q" D7 m7 _6 S' i- w2 D%BP网络训练
* ~8 ~5 @! v4 Anet=newff(p,t,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
2 `, {, v( u  Z2 Q- [: }# [net.trainParam.show=1000;8 C2 R6 \& H2 V8 t
net.trainParam.Lr=0.05;. k5 H- d% v, M5 W5 d
net.trainParam.epochs=50000;
. p5 _. ?+ w! |9 k* ?' enet.trainParam.goal=0.65*10^(-3);8 @% _  n0 S( m  D3 M
net=train(net,pn,tn);4 \' z. N. h  i2 a8 \! D
' K( o3 k6 m& q
%利用原数据对BP网络仿真7 b" m' C8 P' S* ~% k
an=sim(net,pn);" Y( v% t& {$ C
a=mapminmax('reverse',an,ps2);  [  `' u4 F- w. A3 z

+ i& c: {- I  ]4 @5 K%仿真结果与原数据对比测试
; G$ x5 u- v; i8 s5 ?, f% k2 p  Ix=1990:2009;
# Q8 j3 `' |0 ~5 L$ wnewk=a(1,;
8 o  U+ V8 R6 H! v6 ?newh=a(2,;
9 t7 N, Y5 G, A4 \+ nfigure(2);6 G/ e& e* C' G
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+');
+ V4 f: _* r/ T+ ylegend('网络输出客运量','实际客运量');
: z3 Q5 Y, p2 m% |: o8 sxlabel('年份');ylabel('货运量、万人');* l1 I) }. N- [) a* e, L& |' V* t
title('运用工具箱客运量学习和测试对比图');- g2 ^8 j1 \8 v5 O
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+');
3 h$ }, }# `3 W* Q3 O9 Llegend('网络输出货运量','实际货运量');7 E+ M- b$ d# }) q: Q& t! {% a
xlabel('年份');ylabel('货运量、万吨');7 d+ ?% Y; X4 @! b# M5 c
title('运用工具箱货运量学习和测试对比图');  n) [! B# k; z7 O% @
+ A9 I2 k4 R7 X! @- ~0 \5 {
%新数据仿真# I( M6 `2 S6 C5 g6 c4 z
pnew=[73.39,75.55
' K$ \  T: [- M    3.9635,4.0975
: H( s( D) S" g$ B  P    0.9880,1.0268];
9 Y' h5 m  F9 J/ Xpnewn=mapminmax('apply',pnew,ps1);# U6 J4 r; W$ Y) u* v' R
anewn=sim(net,pnewn);
+ l" @4 _* h0 v4 }1 Q; d4 t+ Janew=mapminmax('reverse',anewn,ps2)
  V0 l2 f* s. _/ u) c4 \(修改的地方用颜色标记了)
( h/ S+ z* p% T  n4 t0 \. W麻烦您帮忙指出其中的问题,万分感谢!
作者: 且生    时间: 2014-7-21 18:05
求书名及页码……
作者: 且生    时间: 2014-7-21 18:20
  1. clc
    : Z7 f1 `- @0 n% U# a; Z
  2. sqrs=[20.55,22.44,25.73,27.13,29.45,30.1,30.96,34.06,36.42,38.09,39.13,39.99,...
    * H/ d( Y: r+ u6 ^6 @; N6 O
  3.     41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];7 G; z3 V* [; y4 o, I. Z) B9 U
  4. sqjdcs=[0.6,0.75,0.85,0.90,1.05,1.35,1.45,1.60,1.70,1.85,2.15,2.20,2.25,2.35,...
    & v) Y& L& v5 b  E4 n
  5.     2.5,2.6,2.7,2.85,2.95,3.10];
    0 y4 \. }% b! I) D
  6. sqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49,...
      Q8 R# j- c" h$ j# M: r5 a
  7.     0.56,0.59,0.59,0.67,0.69,0.79];
    , {  F0 V( k: G, s  T
  8. glkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433,...3 G: a% m% E! v1 }
  9.      22598,25107,33442,36836,40548,42927,43462];
    & W! F, N3 K+ q1 d; s
  10. glhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115,...( _: U1 ~- T! ]( R
  11.      13320,16762,18673,20724,20803,21804];) d0 a3 H4 T0 h, f
  12. p=[sqrs;sqjdcs;sqglmj];: P# E6 y4 I. p9 i3 [" v
  13. t=[glkyl;glhyl];5 U' M2 J9 Z, Q7 O
  14. %数据归一化! C+ b7 Y+ J6 a
  15. [pn,ps1]=mapminmax(p);
    % S4 }: V% b6 W9 L( q
  16. [tn,ps2]=mapminmax(t);) b5 x4 e" E( }. R* l0 `4 ~
  17. %dx=[-1,1;-1,1;-1,1];
    : `! `& x5 F' D# ]
  18. [color=Red] p0=minmax(pn);t0=minmax(tn);[/color]! O! K' }' z, q% P% ?

  19. 5 r! k" {! l1 d
  20. %BP网络训练
    ' Z6 c, S7 R$ p% g( `) P
  21. [color=Red] net=newff(p0,t0,[3,7,2],{'tansig','tansig','purelin'},'traingdx'); [/color]2 K0 |1 S' w  U
  22. net.trainParam.show=1000;
    ! F1 \: a  [7 E: Y" Z) c
  23. net.trainParam.Lr=0.05;
    8 Z: F' t0 \4 a
  24. net.trainParam.epochs=50000;
    2 K# k, U7 a$ u0 P3 w# F6 R9 ~
  25. [color=Red] net.trainParam.goal=0.65*10^(-5);[/color]
    5 _* F2 @. R- z, ~% }& t/ l( v6 d
  26. net=train(net,pn,tn);1 p7 O% e/ j: n$ k7 ?9 B9 v

  27. ) K4 K' w9 X2 Q3 n. A* u/ k+ M; b; @
  28. %利用原数据对BP网络仿真0 v. \& a: {8 C( m; K$ z, x: ^
  29. an=sim(net,pn);
    - r4 t. \( @* U! T$ P2 U
  30. a=mapminmax('reverse',an,ps2);
    ! v7 W6 B2 J) Z$ T1 ^. {, e5 G

  31. 6 d9 G1 ^; \/ _+ `
  32. %仿真结果与原数据对比测试
    ' t1 p, M2 n0 G9 A& B
  33. x=1990:2009;! e1 B  X( Q" ?& P
  34. newk=a(1,:);
    % A# M# c, }! ]! r
  35. newh=a(2,:);" l& r5 A  D, N! e+ J
  36. figure(2);; ]( h. N/ u% K" M
  37. subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+');5 v, L/ d1 W5 S* V+ s7 H
  38. legend('网络输出客运量','实际客运量');# w. N. d0 ?/ u1 `* L
  39. xlabel('年份');ylabel('货运量、万人');" X* u, I6 I! s3 T" E
  40. title('运用工具箱客运量学习和测试对比图');% _! Q9 l/ J, U0 I
  41. subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+');
    0 l: G5 B7 T: c$ U- \4 @; z
  42. legend('网络输出货运量','实际货运量');
    , H% e( F, F# R
  43. xlabel('年份');ylabel('货运量、万吨');" }7 C0 |6 t* g2 e% g: y% U9 ]
  44. title('运用工具箱货运量学习和测试对比图');1 b9 i" E& L# w

  45. $ K4 d/ j5 u( x+ }3 \
  46. %新数据仿真' v/ |3 z" B7 q/ C
  47. pnew=[73.39,75.556 i. {2 T+ }/ ^/ ?9 K0 F- O
  48.      3.9635,4.09753 x3 f. w! ~( S2 g+ \: I5 H
  49.      0.9880,1.0268];
      w) f6 P. K4 m% ~
  50. pnewn=mapminmax('apply',pnew,ps1);
    * h2 U* P: m& M" |
  51. anewn=sim(net,pnewn);1 T, e5 P& ?/ R+ b  o
  52. anew=mapminmax('reverse',anewn,ps2)
复制代码

作者: 且生    时间: 2014-7-21 18:22
忽略我上面那个,改动的地方在18,21,25行……求批
  1. clc2 d. O. l& j2 M
  2. sqrs=[20.55,22.44,25.73,27.13,29.45,30.1,30.96,34.06,36.42,38.09,39.13,39.99,...
    7 B" @, @3 D% K6 S$ f; W7 T
  3.     41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];
    ' I& E* K6 ?( O. c
  4. sqjdcs=[0.6,0.75,0.85,0.90,1.05,1.35,1.45,1.60,1.70,1.85,2.15,2.20,2.25,2.35,...+ T; D; d5 \( i
  5.     2.5,2.6,2.7,2.85,2.95,3.10];) c8 x; \; ]8 t
  6. sqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49,...3 C' y: S/ U8 f9 f" g6 u
  7.     0.56,0.59,0.59,0.67,0.69,0.79];. O/ l. o7 O) g/ j4 H: t2 R
  8. glkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433,...4 T5 D. Z; J) d6 P1 p5 f6 j! ?
  9.      22598,25107,33442,36836,40548,42927,43462];
    - `4 d) z6 {6 J+ n( t( E
  10. glhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115,...& M: Y5 {, T# Y
  11.      13320,16762,18673,20724,20803,21804];
    6 ~& K: b% e! i- ^
  12. p=[sqrs;sqjdcs;sqglmj];
    1 U7 K7 Z9 ^! b9 t
  13. t=[glkyl;glhyl];
    & m: g( `# Y9 T7 s
  14. %数据归一化+ y" ?. b# D# J7 Y
  15. [pn,ps1]=mapminmax(p);
    , b5 I/ @* c; ~" D8 q
  16. [tn,ps2]=mapminmax(t);7 L9 Z; e9 i6 k8 h: k
  17. %dx=[-1,1;-1,1;-1,1];
    ( e' Z- n+ c9 r/ n9 T( \
  18. p0=minmax(pn);t0=minmax(tn);5 w7 v! x/ f% F/ k) U

  19. 9 ]2 e" ?1 I. z. f
  20. %BP网络训练" \# N& n" e# ^8 T3 F
  21. net=newff(p0,t0,[3,7,2],{'tansig','tansig','purelin'},'traingdx'); ! u- }1 c* x7 a: o. }! \
  22. net.trainParam.show=1000;, F3 z. p' `& t, f8 U
  23. net.trainParam.Lr=0.05;
    . a2 J# G  a' ]3 ?- K. \$ I
  24. net.trainParam.epochs=50000;; h4 Z- W, l' Z
  25. net.trainParam.goal=0.65*10^(-5);4 F) {# o. J; h: {' B8 m  W* i5 d
  26. net=train(net,pn,tn);
    : i! N, E& {  q# e
  27. ' |# l: G7 g, Q+ {+ B$ }2 y3 p; i/ x2 u# O
  28. %利用原数据对BP网络仿真) I$ [* t! _7 Q3 X, X% C1 _
  29. an=sim(net,pn);
    & C  b# x; s/ P% N- }
  30. a=mapminmax('reverse',an,ps2);
    1 l5 b% x" x2 Q! P* A% t) H+ ], K# o
  31. 1 y2 L0 E( X" R& V
  32. %仿真结果与原数据对比测试 5 E: H, J+ W! G; `+ I+ M& U
  33. x=1990:2009;! z, A9 T% l9 K- g
  34. newk=a(1,:);! z& T* `0 d8 }% O2 \4 Y3 y
  35. newh=a(2,:);
    0 I' A5 L1 w/ j0 U' L& q
  36. figure(2);
    - G4 Q: b1 `) ?6 K3 D
  37. subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+');
    $ C  m; k# }5 W& z
  38. legend('网络输出客运量','实际客运量');
    6 h- ]3 N: a! T3 B" D
  39. xlabel('年份');ylabel('货运量、万人');
    $ |; j. D, M0 X
  40. title('运用工具箱客运量学习和测试对比图');% g) Z: @5 M/ u4 k0 ^1 v2 g
  41. subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+');- {9 |# D6 D/ s, @' Z/ M+ e8 K% s
  42. legend('网络输出货运量','实际货运量');. k- D$ r# z# u3 k$ \, @; h
  43. xlabel('年份');ylabel('货运量、万吨');; [# P! P5 W7 k; ]- }
  44. title('运用工具箱货运量学习和测试对比图');& S' c% f4 d5 K6 _& c. S0 y+ ?
  45. 5 w$ }9 N- r/ Q7 ]. @
  46. %新数据仿真
    0 m* [# y1 e& o( H9 o
  47. pnew=[73.39,75.55$ g* a0 u4 k+ {
  48.      3.9635,4.0975+ B2 O3 F: P! y1 B; X
  49.      0.9880,1.0268];
    8 N& m0 G! [% O* x
  50. pnewn=mapminmax('apply',pnew,ps1);
    1 l- E8 F  u9 J. n: M% L9 X
  51. anewn=sim(net,pnewn);
    ; ]2 A+ h( I4 m# S4 V
  52. anew=mapminmax('reverse',anewn,ps2)
复制代码

作者: T-Eric    时间: 2014-7-22 21:14
且生 发表于 2014-7-21 18:22
; b. S8 u$ ~5 f2 q3 B+ X* i& G! f忽略我上面那个,改动的地方在18,21,25行……求批

* z+ f( {% Z! \4 W2 V. @" o确实改善了很多,很是感谢。但效果还是不太理想,而且为何只学习了几十次就停了呢?即使我修改了目标精度。

p1.jpg (166.22 KB, 下载次数: 578)

p1.jpg

p2.jpg (158.1 KB, 下载次数: 540)

p2.jpg


作者: 且生    时间: 2014-7-22 23:35
  1. %BP网络训练2 @) R' y- A5 S$ N/ p/ h
  2. net=newff(p0,t0,6,{'tansig'},'traingd'); & [3 P9 Z3 B* W6 c1 O
  3. net.trainParam.show=1000;+ X, {4 B( J, ]4 c/ v
  4. net.trainParam.Lr=0.05;
    ) P6 x! S$ V! P) i* h
  5. net.trainParam.epochs=2000;
    ' N4 h, V: U* x* Y: ]9 |
  6. net.trainParam.goal=0.65*10^(-4);9 m1 B4 F6 @) L, I9 c6 V5 G
  7. net=train(net,pn,tn);
复制代码
我只改了这里面的,
) ~7 l3 p1 B3 l) d$ r$ O一、改成单隐含层的,6个节点  [5 c: U; Z3 J# k* y8 _' k; |
二、训练函数改成梯度下降BP算法 traingd
. T6 v& \, p4 m/ d三、迭代次数改成2000$ Z7 z, U0 |0 ^8 H
上面的参数是自己试的,我也不知道为什么。+ q: G; B8 P6 \( ]
由于这玩意儿比较不靠谱,楼主多运行几次就能找到拟合的比较好的网络。; @" e  z1 t: v* p2 B3 J$ @  b
关键问题是有没有过拟合我也不知道,等大神来解答吧
作者: 且生    时间: 2014-7-22 23:36
因为样本比较少,所以训练函数没有选会调节学习率的
作者: 狼之魂汪洋    时间: 2014-8-6 14:00
你这例题是在什么书上找的?
作者: T-Eric    时间: 2014-8-7 20:55
狼之魂汪洋 发表于 2014-8-6 14:00 . O7 c8 j( O# O9 B- {
你这例题是在什么书上找的?
% X; p8 w5 C0 k
就是那本《matalb在数学建模中的应用》




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5