|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 q# V. n; b% j% D
文章目录- \& D" H, _9 l, u y8 i( {1 c
- BP神经网络" ]" ?) g* |) p2 `8 z% h
- MATLAB代码
- 效果
9 H7 ?, f3 T1 s5 d " }7 J. J3 V, n
BP神经网络: ~6 N$ R" k4 ~
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。5 o) F3 O5 V' C& C! \
1 Y! J( T1 Z6 y) |$ G3 u2 {0 ~
BP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每~层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。0 N5 b2 r2 q) p2 I% \( U
+ J2 s' u6 M# h( h2 G. oMATLAB代码
( J& F2 L& r3 U1 X, F7 }9 l& g5 O7 f! a
- clc
- clear all
- %读取训练数据
- [f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
- %特征值归一化
- [input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ;
- %构造输出矩阵
- s = length( class) ;
- output = zeros( s , 3 ) ;
- for i = 1 : s
- output( i , class( i ) ) = 1 ;
- end
- %创建神经网络
- net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ;
- %设置训练参数
- net.trainparam.show = 50 ;
- net.trainparam.epochs = 500 ;
- net.trainparam.goal = 0.01 ;
- net.trainParam.lr = 0.01 ;
- %开始训练
- net = train( net, input , output' ) ;
- %读取测试数据
- [t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);
- %测试数据归一化
- testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
- %仿真
- Y = sim( net , testInput )
- %统计识别正确率
- [s1 , s2] = size( Y ) ;
- hitNum = 0 ;
- for i = 1 : s2
- [m , Index] = max( Y( : , i ) ) ;
- if( Index == c(i) )
- hitNum = hitNum + 1 ;
- end
- end
- sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )
- 0 b$ {( ?" \0 Z% E- f8 Y0 f
' Q5 i& L0 T; G! h3 m" {; V+ P7 A% ]效果+ S5 |/ I3 d1 M8 H# Y- J
识别率是 97.333%
3 `) [2 s! D; b2 a7 c
, D9 j) v) K* z1 h. n6 k+ h! w' ^+ U- _9 ~5 g
|
|