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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—9 c. X  O% [1 i( u
%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
+ i+ _- [: S: c* Yclear all;  
- K* l( X1 c* \% Dclose all;1 D! v8 l9 P* N3 f- J
clc;, r. ?" [9 E% p( x
%% -------数据处理模块------------------
" d2 W4 ]( W6 M- A2 X" q+ u" T& ?data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据9 j2 O; I: \7 v/ v
data1 = data(:,1:7);   %data1指的是属性值
( V5 w' a! b% f" r6 b; Hdata2 = data(:,end);    %data2指的是分类5 v) a$ D8 _, {; F/ D
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
' W9 t2 A% e$ s9 ^6 p( Ddata = [data1,data2];  %处理后数据
0 f$ [, M2 j" ^1 c  \) Q[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0! C+ u( n  ]  ~/ y  ?9 Z* J% I: T
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比  |% d+ t, P8 ~. |2 Z: A! E
%% -----------------数据归一化处理----------
# [% ?! P9 V5 b% }4 l; ?2 u[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数. S+ h' T+ R( `
[input2,ps] = mapminmax(testV.P,-1,1);, u0 ~3 t& a, r/ H: V
%% -----------------构造输出矩阵----------
9 V8 {2 t" A  e0 Goutput1 = trainV.T;/ j" x& z& T1 W% [, i; g/ u
output2 = testV.T;! E/ k! m0 E* ?% G0 _  l

1 R& {* z2 m" J# }% o+ j/ a%% -----  建立网络--------------7 n4 g* X  b* B' \$ m9 N; u9 z& I
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
, ^/ u  o1 G3 _' r2 `, K$ A%设置训练参数% z6 B( o" |& e; X2 [
net.trainParam.epochs=800;  %训练次数; G* t9 ]; {" D, `. {2 ]4 [
net.trainParam.goal=0.005;  %网络性能目标
7 T  ~7 z5 F& x* bnet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
, q  L" T  U9 xnet.trainParam.lr=0.01; %学习训练速度: Q9 j+ X5 b" u3 N0 [( P0 x

+ r: h# `; }8 i% z+ v4 b%% -----  训练网络 --------------$ I3 K3 M8 D0 I% e
net = train(net,input1,output1);# `9 p; `7 Y% q- D
%% ----- 仿真网络 --------------7 @- g" q6 Q0 E% }( H: {  B" x1 M
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
% |9 U3 R4 F) s# R% |, Q3 K/ R/ zoutput_fact(output_fact>=0.5) = 1;
/ f6 D1 J: D( V2 v: [output_fact(output_fact<0.5) = 0;) k7 i$ t/ p# _" Z6 P3 t; X0 x0 b' L
N = length(testV.P);# Q" \6 Z8 p, R3 U6 Z
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);
% E* Z; M) g9 l" K4 ~: l; Youtput2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
; m7 n* g* |1 N9 vcorrect_rate = sum(output_class == output2)/N;
3 V( u1 f9 \: z1 U3 f' X# [sprintf('识别率是 %3.3f%%',correct_rate*100);* [% r! j5 S: ]
, j7 Q; r3 V0 K: A7 U, L
问题描述:- c' v1 j1 H0 {* [3 D6 n4 s

; D" A5 U$ M4 N* Y6 I# {3 ?上图为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-6 08:11 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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