找回密码
 注册
关于网站域名变更的通知
查看: 454|回复: 1
打印 上一主题 下一主题

BP神经网络方法问题请教大神。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-9 15:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
9 f3 F; D) ]% m  E3 O%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
9 r5 D, S3 g: rclear all;  
' d5 U3 Y" m/ i5 ]" D2 Mclose all;
* k% F. x9 l; E1 O% h( aclc;0 q$ q# ?9 p; U1 a9 P! R; [' a
%% -------数据处理模块------------------' s  s4 J: c3 A( I; L. n
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据* J, L  m, q% g  Q
data1 = data(:,1:7);   %data1指的是属性值
, Q' x5 g% {2 l4 F8 ~data2 = data(:,end);    %data2指的是分类
! J6 \5 g+ X8 v* R) S% r/ }data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。* ~; C, I* o' V! _
data = [data1,data2];  %处理后数据& e+ H; l1 E# f1 K  L
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
' |0 q* P1 M2 z%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比
+ p$ J0 a8 @* C7 _8 }  {%% -----------------数据归一化处理----------3 i3 B" D/ X( h* d
[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数, v7 G7 F' E  |! _+ C3 ]
[input2,ps] = mapminmax(testV.P,-1,1);, ~, b0 u1 {& x1 H% H
%% -----------------构造输出矩阵----------
) i4 b1 s- s$ N" h" r+ Ioutput1 = trainV.T;* f5 [- J7 l8 E" c$ h
output2 = testV.T;' R  ?% t6 m8 s& B2 C

5 e3 H9 r% w! {/ D5 {) r4 K%% -----  建立网络--------------
# p( E! H5 G2 s8 e% I& y- ]& L0 V7 Hnet = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
9 b& S* W- _$ P* z7 d/ i%设置训练参数
' @  I5 @* X5 @* b9 u* |2 Bnet.trainParam.epochs=800;  %训练次数/ f& I( b& J/ M! H5 G6 _# v* Q
net.trainParam.goal=0.005;  %网络性能目标
! p/ {; r4 F* o6 k1 g+ P3 Ynet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。. p$ u( t* w1 V5 X  n' |- i. |  N8 H
net.trainParam.lr=0.01; %学习训练速度
$ e! ]4 K( f6 G) `& l6 a# m' e0 k* m" ?4 X
%% -----  训练网络 --------------
3 n4 T8 Y% a! r; S$ Q# E- Knet = train(net,input1,output1);
& Z% T: W+ \- `2 J7 a%% ----- 仿真网络 --------------
  G' s# E& ~6 d# V4 }0 g8 R% P, A  t- W8 ~output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
6 \3 X  R' d/ n: ~& ^' youtput_fact(output_fact>=0.5) = 1;, n  a+ q2 n, N$ G- w- a% }$ }
output_fact(output_fact<0.5) = 0;
" x2 G& G0 ^9 C) u& e7 \: ?- T  H7 SN = length(testV.P);" n5 @3 H& [5 p5 i) p$ a( q. K& Q
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);1 Y' X7 K, Z; o0 S; k, r& v3 P
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);- d; U4 k1 b( |3 B$ I+ Q
correct_rate = sum(output_class == output2)/N;
" r' r1 p8 F8 G9 O; s  Dsprintf('识别率是 %3.3f%%',correct_rate*100);# m9 s7 l) ?- d. C5 ]
1 b0 h8 e; K* A, Z
问题描述:
- c3 Y. o$ b+ [$ J2 [1 r! @2 K
, ^7 s. m- P7 B/ \* e- U上图为BP神经网络结构图,上述代码是想将数据分为3类,我想将这儿的输出层2个节点改为3个节点,该怎么修改?请教大神,非常感谢!
  • TA的每日心情
    开心
    2023-6-12 15:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-5-9 16:31 | 只看该作者
    神经网络太难了,我们用的都是i简单的功能
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 21:44 , Processed in 0.187500 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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