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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
  `! F) \- U6 \2 }$ x%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
* B0 u5 x8 O% R/ f  G5 eclear all;  
2 x. Y3 [! p. ?# Eclose all;
8 L5 x$ H& V* B% z6 }clc;' `4 D" T. b0 i& }# T8 i2 F2 U
%% -------数据处理模块------------------! q- Q+ u/ B: c* F  v) T  `  N8 c' H
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据
; {1 x  f1 Z' Z9 m( [2 W! cdata1 = data(:,1:7);   %data1指的是属性值
$ w) w' u6 w4 k% Fdata2 = data(:,end);    %data2指的是分类
; W* ?  g( X, s7 v8 r! adata2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。0 A" k. q, Y8 K, r
data = [data1,data2];  %处理后数据1 @1 c3 j) T7 ~' ]
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是01 j- A7 B: c/ P9 ^2 A. L
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比
4 v$ c! i- q* |* L0 W/ g%% -----------------数据归一化处理----------
( F# e- T- z- l. \[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数' N' P# {. E; q% N6 o
[input2,ps] = mapminmax(testV.P,-1,1);+ p. V+ U$ S" a) r: B3 ~' Z1 b
%% -----------------构造输出矩阵----------
0 F/ O7 v5 ^# ^+ |* Ooutput1 = trainV.T;
- C  O  r7 I! e" o9 V( I, N. soutput2 = testV.T;+ K# H+ _) a( m+ Y. I

  N4 N# t9 R1 t# b! R; P9 }%% -----  建立网络--------------
3 S* T, g7 a9 e( Q) V' k6 Gnet = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3& ?* P. ~' [2 R+ T* E
%设置训练参数, D5 r5 b' |4 w
net.trainParam.epochs=800;  %训练次数$ {# r* `, D2 D) K, D
net.trainParam.goal=0.005;  %网络性能目标9 A6 j; V9 O+ ]. \; d9 m& e* [
net.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。9 F5 F1 M, _% _% d9 i
net.trainParam.lr=0.01; %学习训练速度2 S) X9 z$ a0 o, _7 }! y  t- ]  j+ `
2 O2 D9 g2 ~( ]. v2 q3 p
%% -----  训练网络 --------------* x; k. _  J8 W6 l
net = train(net,input1,output1);
% @& C0 e0 d% O/ S6 d6 O%% ----- 仿真网络 --------------9 g) H, X& t/ u4 e! O4 O/ E/ b
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化, \* Y; q( ~) Z' N) q' P
output_fact(output_fact>=0.5) = 1;
& C3 A5 z+ o$ c8 youtput_fact(output_fact<0.5) = 0;
( k! s6 z, R! h* k' X3 p5 RN = length(testV.P);
$ }  p: M; |3 f) h0 s7 T% m/ T, doutput_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);
. A$ O, F- ^! d& B: S0 Xoutput2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
1 |9 u# F; h: g* Ucorrect_rate = sum(output_class == output2)/N;8 m7 t+ E9 i$ C
sprintf('识别率是 %3.3f%%',correct_rate*100);
1 N1 ~& S  g2 }. t1 p* f
& [. b2 U8 I7 Q- j8 m问题描述:4 {% ^( Z! ^' \
4 a- X1 r% A5 P) r. A
上图为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 10:46 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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