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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
. A* ^$ W2 M2 s: [%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%- i& \; A" T6 \4 k3 a
clear all;  
. a9 I5 l/ \" J* J4 W9 T# Y; Wclose all;
1 x8 I/ x# G1 n# _7 qclc;
" g& e8 y/ S% x( l. f$ E% W& y%% -------数据处理模块------------------# m5 w, e/ h# V& Q
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据0 ?; r3 x4 T- b* a
data1 = data(:,1:7);   %data1指的是属性值
8 [1 J- L" {$ Hdata2 = data(:,end);    %data2指的是分类: s) u5 N5 m7 x% p% L
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
4 d4 C1 r* Q6 A. r& @data = [data1,data2];  %处理后数据# M: H) d- i, ^4 k+ M0 F. H
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
5 |4 y/ q, \6 N! {# i  p. F+ E%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比# e! c, ]+ x; v  k& V
%% -----------------数据归一化处理----------4 S2 e! E! O& P8 o+ ^+ ~
[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数
8 t0 Q' y+ h5 M# e[input2,ps] = mapminmax(testV.P,-1,1);
# l4 B$ l+ R( f- G7 p7 B, h+ w%% -----------------构造输出矩阵----------7 f4 r& b7 t  q
output1 = trainV.T;
: E4 v' u5 b  p& L  Joutput2 = testV.T;# N) n. S' E7 B, E# [/ I

# B* i( F, |( P# d4 _" B%% -----  建立网络--------------
5 B  d4 ]( e- F# tnet = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
$ |) A$ c3 f- Y% w( M4 v6 j%设置训练参数
7 y, y( W! H3 Y( p/ Knet.trainParam.epochs=800;  %训练次数4 }% M; v2 C% A0 d, |
net.trainParam.goal=0.005;  %网络性能目标
  B, l' J& r& p9 S4 fnet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
5 B* g+ x# G% T% Z$ l$ k7 t, ]net.trainParam.lr=0.01; %学习训练速度
$ v6 b" t  w; v; Q' v' O( `$ _: l9 z/ M# }5 l( m; r
%% -----  训练网络 --------------! P$ r5 [+ ]; W7 T! E0 p! z+ n$ D' ^% h# t
net = train(net,input1,output1);
3 M' e2 g1 W& A! x+ b4 a$ w9 S%% ----- 仿真网络 --------------4 J5 B2 A1 A6 U
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
( t+ k! d9 E# ?% z- O1 Qoutput_fact(output_fact>=0.5) = 1;$ d2 m- I' z; |/ Q: v# X
output_fact(output_fact<0.5) = 0;
: s1 e$ Y6 ~; X6 V' P- ~: S4 ZN = length(testV.P);6 V4 x# |, w! v) w3 |% G2 {7 R, p7 @$ ^
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);: A; k6 h0 V, p: W2 O9 X
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
- @% D; g) @) k+ pcorrect_rate = sum(output_class == output2)/N;: P& t$ h  y& ]
sprintf('识别率是 %3.3f%%',correct_rate*100);6 f1 T' V+ n; y; K# d
. E3 ~# d) @9 d, j' O  j
问题描述:. S7 l/ t" @' w: T8 k# y) [% v1 C

# `3 ?" S+ S& {: F6 n上图为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 13:42 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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