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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
: d+ v) B' g2 b+ K" @%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
  g" \1 G- q# S4 X4 C% {5 M* m+ tclear all;  ( Z1 F% z# f/ p7 i# `# S0 d4 x
close all;. O4 V* x' V, g" R4 u! j4 p
clc;. x: ~9 i- F6 F1 Z
%% -------数据处理模块------------------
9 ~( [5 |, {. }, Q+ z& o- c% ydata=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据. D0 a! m0 d- n7 j
data1 = data(:,1:7);   %data1指的是属性值
- P1 h$ r2 x( ~; e4 u0 mdata2 = data(:,end);    %data2指的是分类8 B3 N; V1 j+ D7 d
data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
" J8 d% x8 K& pdata = [data1,data2];  %处理后数据( \2 I' V0 v/ Q, X7 s  C5 }
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0, U1 O; R* `6 V4 F& @' @0 d6 K1 t
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比1 U2 P% v- R  V7 y/ F# Z% u
%% -----------------数据归一化处理----------2 J  x( O6 t& ?8 J: k8 T
[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数
% n7 s* Q7 c- f# y( P. g[input2,ps] = mapminmax(testV.P,-1,1);
$ `' ~3 O* D: S  |3 L; i%% -----------------构造输出矩阵----------
  k9 F" m; E0 A$ Woutput1 = trainV.T;
  {  j& Z  Q5 i# _, Aoutput2 = testV.T;% w; k. i" f2 {/ y3 N- T

( H, \& E' H  u0 v3 h5 t%% -----  建立网络--------------  V0 @" o# U. V/ H# b- Z
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3! c- \) W: }% J+ x/ U$ S
%设置训练参数
, V! @8 @% {5 R$ e: L2 Onet.trainParam.epochs=800;  %训练次数: w, q) ^2 ~( ?2 G. ~( |" p5 E
net.trainParam.goal=0.005;  %网络性能目标
) K) X! N7 M7 Dnet.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。9 v3 \* H( O6 M3 C
net.trainParam.lr=0.01; %学习训练速度. C- `* n5 e4 y8 I. _

9 z; L3 ^% l' s" u* J%% -----  训练网络 --------------2 Y5 K- {5 ^3 |5 e
net = train(net,input1,output1);
6 g0 X( _$ i& W* Z$ S- h; t%% ----- 仿真网络 --------------
2 d8 r+ a, Z) M- L; }) V$ qoutput_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
( c; l1 s5 O* E( ^( c# M, ^output_fact(output_fact>=0.5) = 1;" ^; f7 J$ X7 G6 M
output_fact(output_fact<0.5) = 0;
) Q! X1 K# N4 P8 s, GN = length(testV.P);
% [) |1 I; k. D. K4 W, S1 o/ Youtput_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);
; E) J5 ]4 m$ W, A. |2 zoutput2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
" d) g2 G0 Y! A$ p  v3 }correct_rate = sum(output_class == output2)/N;  R; j6 T0 Q- g: x/ [2 N
sprintf('识别率是 %3.3f%%',correct_rate*100);
( [7 }" ~+ }- a, W
9 C5 A5 T; G4 @; j1 Y7 I' T3 [问题描述:
0 Q* x% _3 A; G4 ^/ P , m2 S) y% _8 t8 K# w& 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-6 06:20 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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