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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—7 e; g( z3 p, r$ T
%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%5 I) Z* M, ?3 z
clear all;  % [0 [* B# _0 ]( M6 B% Y
close all;
# M1 |$ f$ r+ C9 bclc;7 P  J* j. u% k) A. [- T$ i
%% -------数据处理模块------------------' k/ |8 V- R5 k% T) }  {8 i3 s
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据
* v( J1 y; o: Idata1 = data(:,1:7);   %data1指的是属性值
) p1 K4 H6 }. z7 s  mdata2 = data(:,end);    %data2指的是分类
1 R6 ~0 ]/ F7 odata2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。( C+ B/ I, J1 P1 c
data = [data1,data2];  %处理后数据
, Z$ @- @: E" v: |9 Z[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0; Y9 `9 [7 X  {( P! T) p, q! ]
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比
# O7 ]: ^7 y6 X  ^" J%% -----------------数据归一化处理----------  X! _8 y5 d" P+ I9 J5 s: c. r7 m
[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数
# }. X  e/ E1 |3 B[input2,ps] = mapminmax(testV.P,-1,1);2 T: d3 x5 H$ d1 d) H9 |
%% -----------------构造输出矩阵----------
- A+ N" W3 s: g: t$ ?output1 = trainV.T;1 g* F1 u# x# l
output2 = testV.T;
) _" ^- _2 t( D; ]$ C9 i- N1 }
%% -----  建立网络--------------
' o4 k* s# }/ Znet = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
( e4 n4 x$ V, u7 w9 ]%设置训练参数: f. ?+ n2 G% C( [  x& Q
net.trainParam.epochs=800;  %训练次数- ?9 p; E2 M. Z  [
net.trainParam.goal=0.005;  %网络性能目标
9 }% w3 v8 M7 L# I* j" t8 bnet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
+ N4 B/ f0 [/ rnet.trainParam.lr=0.01; %学习训练速度
: d# N9 m* }! s4 P) q- `/ p% j. Q  R% H% f; H, w, ?
%% -----  训练网络 --------------, o! |- K7 p. W6 K: t4 z( `" E
net = train(net,input1,output1);3 W( Z) b, v4 r
%% ----- 仿真网络 --------------
2 ?2 u* C7 T- f2 D8 s( x6 `output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
/ X; R) a2 J; c) g& Y+ moutput_fact(output_fact>=0.5) = 1;
) R! O3 E# ]5 `* \- Q* Woutput_fact(output_fact<0.5) = 0;8 g* e0 P% g/ |- b
N = length(testV.P);/ o. l- u' h9 z' k4 x1 u
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);$ Y- \! O. H& N
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);* G4 x6 q8 `3 B1 [. J+ W/ S
correct_rate = sum(output_class == output2)/N;) ~' R- e7 u9 U& s1 [" o
sprintf('识别率是 %3.3f%%',correct_rate*100);
7 l; J5 e, U# _# j
$ v  S+ O9 f$ I& I3 V& `( t6 \问题描述:) z) n! q3 b; U. v( G9 p

, W+ V5 R! B- m1 T$ j  H上图为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-7-23 09:00 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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