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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
( y  F# g% ?0 G  Q" Y  v%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%5 _8 Q5 X/ o; M9 O4 i5 U
clear all;  9 {- y* R% y, ?/ p
close all;( U0 N: r  I" S* f7 J/ y# g
clc;
- ?, G+ Z+ u3 P/ z, d5 g%% -------数据处理模块------------------
) N" u% }6 ]+ fdata=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据2 j8 h; c0 X( W: F' s0 n1 G
data1 = data(:,1:7);   %data1指的是属性值
3 e  _! L! M/ j7 ^6 X8 wdata2 = data(:,end);    %data2指的是分类+ {% S2 S* W, w
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
5 [. S" y& K' r3 ^6 f  F# Bdata = [data1,data2];  %处理后数据
" g. S" u: T8 A) ?5 K- p; G[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是01 O4 e& a8 Q; g$ d3 `
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比
& @" Q# s5 s. H+ O* m( f0 Q% G8 H%% -----------------数据归一化处理----------% N& S9 R0 _/ `6 ?0 O
[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数
0 W. C8 X3 S  y/ U6 G& o9 H5 h! i[input2,ps] = mapminmax(testV.P,-1,1);" d, A" N9 ?+ W6 @; Z
%% -----------------构造输出矩阵----------' L, o( n/ K& R/ G" x$ R3 B
output1 = trainV.T;" G; ?+ j8 T/ m0 |
output2 = testV.T;
  o2 x  V. K6 v2 F
) s8 P* Q0 ?% D7 k) B# m%% -----  建立网络--------------7 F2 f' B) n7 ?, W* L: [& w+ s2 G
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
+ h: D: H% F1 ]4 _%设置训练参数
5 I' L% U. z5 t- ~" a6 C, vnet.trainParam.epochs=800;  %训练次数5 q6 v0 a% l: E' O; c; P4 L
net.trainParam.goal=0.005;  %网络性能目标
; `2 s; b5 t) [: i$ D1 mnet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
  ?1 W( ^$ G& `+ L: `7 u. Nnet.trainParam.lr=0.01; %学习训练速度
5 g$ G+ W  F) E6 \2 y% T' Q# Y) u! ^# X; y2 }! m
%% -----  训练网络 --------------
; J: g- N% b( @: S2 w. m+ Fnet = train(net,input1,output1);+ A/ {( p  i3 i, {
%% ----- 仿真网络 --------------
& z; {: ]! E3 l1 E, [! k8 Toutput_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
9 H, \) E7 _5 \1 G3 z7 f" Doutput_fact(output_fact>=0.5) = 1;
, ~, P* _! q" X0 ^1 e5 w6 d% Toutput_fact(output_fact<0.5) = 0;8 @" [, Q. f4 N/ I$ v$ ^  H# m
N = length(testV.P);% r, s/ R5 W! B, A+ C
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);4 y6 x. A& R" M$ O' K  e
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);# m+ w) f( M, @  J* w- x- e
correct_rate = sum(output_class == output2)/N;+ u2 s- B  y# q& e* L
sprintf('识别率是 %3.3f%%',correct_rate*100);
( _, F& R. ?: S0 @2 \5 R& `+ }( |. Z2 l' N) U4 ]8 o6 l
问题描述:4 W+ j  g  U' H* Y$ U
) O5 ]/ h, m+ e, J- l/ \
上图为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-18 11:30 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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