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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%-----BP神经网络方法—
1 \& T3 k  i& }  L$ i8 h7 P- a%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
5 O! [3 Q9 Z# U" y; mclear all;  3 M. W+ z3 d, _$ y" Q
close all;$ O4 t8 p( `& u% c# E
clc;, C  G/ y) `, k5 v8 K
%% -------数据处理模块------------------
4 V* t6 k: K3 b  P: x& w" c8 Z  Ndata=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据
# n! a; u* C0 H3 Idata1 = data(:,1:7);   %data1指的是属性值& `% G* I) @" e4 v: r
data2 = data(:,end);    %data2指的是分类
. C- Y- O8 Q) H8 Q8 I$ U( m- Y2 ~data2 = double(dec2bin(data2))-48;   %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
( Z8 x5 M/ c) Z% Z# rdata = [data1,data2];  %处理后数据
# S+ S, `% u2 F  V[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
7 D" i4 e0 ]2 u3 K& H4 ^- ^0 F: e2 Q%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比5 S  O- t5 y; C3 E" c  s! J- r6 D, H
%% -----------------数据归一化处理----------
% G; b$ M" ?, V3 z9 P  b( p[input1,ps] = mapminmax(trainV.P,-1,1);  %由于mapminmax是按行归一化,行表示属性 列表样本个数- Q$ v8 \: @1 `* S/ \# E
[input2,ps] = mapminmax(testV.P,-1,1);
, \7 T  d5 s6 q  P- E' F%% -----------------构造输出矩阵----------1 g6 n2 ?  `: R$ W$ e
output1 = trainV.T;
; C/ Z" V- v/ U/ R, woutput2 = testV.T;
4 w% ^$ g+ V0 u1 T  C7 \8 {% Q7 i: |: q, G: a' I9 i0 l
%% -----  建立网络--------------6 g: ]( x4 e! B; R1 X( ]
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
/ E/ p. T: Z# @2 z; S%设置训练参数
5 G0 ~6 N+ h4 s4 @net.trainParam.epochs=800;  %训练次数
4 b  d' G3 Y7 W! ~/ @/ Y, Anet.trainParam.goal=0.005;  %网络性能目标: s" N8 O- B4 x- S! f; J9 l7 _5 J
net.trainParam.show=NaN;  % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
) ^% ^" W+ s1 t3 \# Q/ \net.trainParam.lr=0.01; %学习训练速度
$ Z+ |( X& ^" S0 i, ]4 _$ r. w* u* n+ \  S$ ^/ a+ {
%% -----  训练网络 --------------
1 k5 G6 ]# C8 Y2 X0 jnet = train(net,input1,output1);7 w4 z1 B8 [/ S; u8 L0 }# f9 z
%% ----- 仿真网络 --------------. ]1 I! Z6 b* J2 X4 j% }& v
output_fact = sim(net,input2);  %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
* x/ k* N, l2 a$ Coutput_fact(output_fact>=0.5) = 1;
$ S$ e! A' w3 \; uoutput_fact(output_fact<0.5) = 0;, D# N; N$ H1 G. Y
N = length(testV.P);( C8 |$ p8 f# f! W; E/ {
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);" Q: I: i7 n7 V% W- w. h: i
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);0 L' g: X! V. t+ V$ @" Q
correct_rate = sum(output_class == output2)/N;5 ]- c7 h" G+ }6 F; g- j
sprintf('识别率是 %3.3f%%',correct_rate*100);
" w  \$ W. q; l# a: j+ k9 _' Y" l! O9 F* {
问题描述:1 w1 z% v' t# _6 I, U+ A

: q: ~$ E6 d1 Q0 m% v: m! s- n上图为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 12:08 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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