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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
; [! q7 Z+ k( R%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
2 \+ b, M' y7 {/ Y) h3 D7 nclear all;  & [0 G6 {3 D: B2 m
close all;
4 i( I' `4 @- t! {# ]4 gclc;
7 |* W1 h+ f5 u5 U6 c0 [- @$ a. t%% -------数据处理模块------------------# ?3 {& K  g. p, c
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据( A$ z4 {- G# b  Y$ K
data1 = data(:,1:7);   %data1指的是属性值
/ D5 m6 V" E4 i: ~, b; Kdata2 = data(:,end);    %data2指的是分类
. |3 p( ]( ]" U  I* V, X- ^7 odata2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。* w/ F4 }5 u  P: \' n: j
data = [data1,data2];  %处理后数据
# D0 n/ V; ^( `, w/ |$ k6 ~[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0' C* q3 b6 @5 }* w5 \, d
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比3 M7 [, J8 L. Y* n7 Z
%% -----------------数据归一化处理----------
8 y# B$ M* K1 }- Q. r9 \' n[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数  `/ i$ v/ }, f! o$ E
[input2,ps] = mapminmax(testV.P,-1,1);
! ^, g3 `7 J& p& f0 n5 f%% -----------------构造输出矩阵----------
+ ?, A6 z' ^( x: `output1 = trainV.T;
+ V0 r7 m- K2 Z8 ~output2 = testV.T;" y1 _0 [/ d4 f- l" l1 ~

1 ~  c( E8 E# _. k%% -----  建立网络--------------1 @2 T( H1 d9 O! Q. G
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为33 p7 `  R$ o, K1 F
%设置训练参数; K9 Z/ X! N; `: M0 j3 C7 a# j
net.trainParam.epochs=800;  %训练次数9 s  X, u9 @8 a% @
net.trainParam.goal=0.005;  %网络性能目标
  w2 a: s3 q: D' Snet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。) s% H- f* |8 z) N1 d& a. E) ]
net.trainParam.lr=0.01; %学习训练速度: ?! e, W( @9 A" w
; x% B% Z# w: n1 Y
%% -----  训练网络 --------------* C4 V' C/ A  i" x  D
net = train(net,input1,output1);
% D! r$ b/ o% k$ q$ ]# d%% ----- 仿真网络 --------------% \& N# |7 r. A) t" W$ k
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
- t) F+ f" i# ~! }  Y' @+ t. Woutput_fact(output_fact>=0.5) = 1;4 v! {' g6 e6 c$ m7 X2 o' s- D
output_fact(output_fact<0.5) = 0;
) u) K7 n' i* V  eN = length(testV.P);% D  f  I! F0 q& Z+ \4 s
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);' M7 F7 D0 o7 D% t
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
* l. l, L, ]: c. I- Vcorrect_rate = sum(output_class == output2)/N;
1 ]. S1 h$ a4 S9 F. Q' y- Ksprintf('识别率是 %3.3f%%',correct_rate*100);# Z# d8 L. D0 K+ i% I3 s

: G& o0 ^" I( _7 |" D! S& W; T问题描述:# R% e0 y. V7 }4 M! M" `
, h1 e2 m$ U( {2 ?7 t
上图为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 05:44 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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