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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—+ P6 l1 P4 u7 k3 c4 b/ y
%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%4 b) M# S3 N, \: d1 P8 Y: c
clear all;  
1 e$ x& Z0 Q7 L( `1 wclose all;! ~- _- Z& I" [3 n/ W/ E" @$ r
clc;
7 |5 G) f0 p, o6 l3 ?  _%% -------数据处理模块------------------, w- x& o( Q) x8 l& M
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据
+ \+ j0 H( g' x* Ddata1 = data(:,1:7);   %data1指的是属性值- S; ~9 a5 {/ ?1 f3 b$ ]' ~7 n! ~$ z; v
data2 = data(:,end);    %data2指的是分类3 d, m8 @; j/ i
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
/ P. `: @  [6 x7 z, E* Pdata = [data1,data2];  %处理后数据' c, B. I/ o' i
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
6 j: J$ c: @) H) i. d, Z& L%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比! d. j9 u8 A7 H7 M1 C
%% -----------------数据归一化处理----------
5 \" Q  ?" B; Q2 b" o[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数% v- e/ m' _/ D
[input2,ps] = mapminmax(testV.P,-1,1);
- f2 I! K9 W7 w5 @%% -----------------构造输出矩阵----------
; k* W& k1 V  B/ F) R$ d, u8 I7 \6 koutput1 = trainV.T;
) f4 h% c' Y, ]8 foutput2 = testV.T;0 @6 B  }) r- x
' A* w% w) F$ e5 U) U  {9 |, O9 m; R
%% -----  建立网络--------------
9 V: _1 b. y2 u1 r2 @net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
2 x* S; _1 D! L  {" s. U%设置训练参数# o3 F1 V& r8 ]0 v8 Z$ K3 u# w  I
net.trainParam.epochs=800;  %训练次数
  c- H" P9 U& [' m! }  N5 enet.trainParam.goal=0.005;  %网络性能目标
9 U  B8 u/ Q/ E0 {5 m5 [net.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。! k4 S% G8 Y1 a
net.trainParam.lr=0.01; %学习训练速度. k7 n3 |. F" M; m

1 ^% ^2 L7 R0 r. ?; W%% -----  训练网络 --------------9 |& z) a7 f5 C+ a, _
net = train(net,input1,output1);
+ V9 I1 L& y5 X2 s* r3 P%% ----- 仿真网络 --------------$ ^1 Q3 P% S) ~. y" T4 N, q# Q
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化3 G5 H4 s% T; R  u2 e# k* F' S
output_fact(output_fact>=0.5) = 1;* ?* P1 \1 @/ F) d9 R5 h
output_fact(output_fact<0.5) = 0;
7 ]5 E0 j# s' g) c- r- N! X! oN = length(testV.P);
1 _! L' G! \. U5 F; _output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);8 R8 q, H$ }& ]1 _- L4 S9 n' p
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);# L" |5 V7 O6 o& f9 W: `0 p: j5 G
correct_rate = sum(output_class == output2)/N;
& u' l( e7 k6 S" u+ Fsprintf('识别率是 %3.3f%%',correct_rate*100);
# L( t4 m+ G: [8 \5 H( a- H
6 e5 b. j8 \7 @5 a4 N: Q问题描述:
% z% [( D( {' x7 Q5 S: m
1 r5 L- Z# m% v7 n* Y6 W  [上图为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 16:30 , Processed in 0.203125 second(s), 26 queries , Gzip On.

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

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

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