|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( z3 [$ p3 S1 k: E6 `" r) V文章目录
: O9 ~* g( C2 _' b- BP神经网络+ V6 R0 l2 }; T0 W0 h7 m
- MATLAB代码
- 效果
: |; c: P6 ^5 \/ u! e : r1 J9 q9 C- u% s! } E
BP神经网络 N4 C0 l% }2 ?
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。+ I4 x3 O* ]3 W4 z2 f
+ i- B: Y% F* y+ UBP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每~层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
" [, U. p* j( g# R0 w C+ }( z8 R: S B. D# ^" ~0 G
MATLAB代码. R% I. z2 h F* r7 V7 ]
4 Y7 \: p1 i( L; e
- 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 \0 k$ H2 ^/ Z
; s! f( P. f6 z; N
效果
$ n+ A( T5 a: x! T @识别率是 97.333%$ {+ W' ?. I9 U7 H
5 j E0 c, }) V a" q' ?8 D8 z7 ^% A- c2 O( ]; i4 w- G U/ Z- p
|
|