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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—" p/ m. F; g" T2 u. @
%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
2 n' F6 W" z7 F# ]+ ]  R$ Fclear all;  
, o0 a- Q) d- q, ]/ @6 a# sclose all;
4 r) v( U( y0 Y, z) i% o; mclc;0 [' _$ p! l9 O) F
%% -------数据处理模块------------------
+ ]  k4 C+ y0 l$ l4 K) U. qdata=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据4 \7 \+ n9 Y9 Y3 I: O1 B5 u* `
data1 = data(:,1:7);   %data1指的是属性值! d& Q) u9 y- D8 Q7 E: V2 z
data2 = data(:,end);    %data2指的是分类( B3 M; j; j$ S3 G7 `% |3 l
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。3 a& }5 S! e+ v( t, v4 N& O
data = [data1,data2];  %处理后数据  V: a  Z/ o" c
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
% G- B4 y4 H3 p7 d6 n3 J%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比% N  L5 H. A( p+ R% o8 P4 ^4 G' _# L: x
%% -----------------数据归一化处理----------
  v* G" h: n# z- J[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数
0 }) F- K+ e3 s[input2,ps] = mapminmax(testV.P,-1,1);
8 D7 B# b0 }# c5 @# s: A%% -----------------构造输出矩阵----------
8 P$ L( k2 A' q% q* Toutput1 = trainV.T;
7 H- N. V" r7 boutput2 = testV.T;
# n' y4 h1 B- ]! [- s2 y
7 |, `) i" e( c%% -----  建立网络--------------
1 I( B; u/ o4 y) Z4 Y$ b3 Tnet = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
$ E& T4 k9 G* @%设置训练参数$ g$ |$ H! z* E5 m' ]: S: Y
net.trainParam.epochs=800;  %训练次数
, u) l3 d# Y+ i; C* n: @; s( rnet.trainParam.goal=0.005;  %网络性能目标/ t! u5 `0 Y8 R4 ^, p
net.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
% V# O2 R8 Q9 U" N6 S/ S; bnet.trainParam.lr=0.01; %学习训练速度
) e2 T3 l: I3 T7 J# I6 w0 H3 C& o0 l9 ^$ f* N8 M% C
%% -----  训练网络 --------------8 ^$ t2 Z0 @# n8 I  E' d$ c
net = train(net,input1,output1);5 _3 K  U: i& b4 K7 O$ _1 p3 ~1 b7 X
%% ----- 仿真网络 --------------
# c' V* ?% r5 t( e7 |output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
& @9 k1 A3 [% p+ D8 ]+ j! Youtput_fact(output_fact>=0.5) = 1;
3 E. B3 n+ S3 ^1 y( x, ooutput_fact(output_fact<0.5) = 0;: H4 V, U0 O9 P8 D' ^  P
N = length(testV.P);* @2 }8 ~6 D+ A
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);
% p/ v0 W, ~, m. I9 W$ k6 noutput2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
; H$ E: l; E1 O; X; ]! M7 bcorrect_rate = sum(output_class == output2)/N;+ v1 R. d5 m/ d- V. f
sprintf('识别率是 %3.3f%%',correct_rate*100);/ q" Y- a; o$ P7 Y. V6 [1 R; p$ `
( Q- y* H% O* M. e- b4 F( f
问题描述:; Q2 J% N) Q% X
1 g$ G! b' }! y
上图为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-8-23 17:08 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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