EDA365电子论坛网
标题:
BP神经网络方法问题请教大神。
[打印本页]
作者:
naimei
时间:
2020-5-9 15:52
标题:
BP神经网络方法问题请教大神。
%-----BP神经网络方法—
3 N3 ]+ W7 A+ `& q6 f1 c
%思路:将iris数据分为三类,训练数据和测试数据,用dividevec函数随机抽取,因此实验结果是不定的,最好情况是100%
- G7 k6 ^1 P) N/ L. b; A2 a) ]' d
clear all;
& [5 |4 c' V& v' V# E& W! E
close all;
9 d3 L! F2 ] T* v3 u4 S/ E
clc;
1 I9 R$ T5 T9 H8 ?
%% -------数据处理模块------------------
' r% y# [$ I3 R+ {+ A2 X# \$ }2 P
data=xlsread('iris.xlsx'); %此处的数据已经做了相应处理,因此xlsread 直接导入数据
3 n/ [+ h/ b* O8 M* z' N: @
data1 = data(:,1:7); %data1指的是属性值
6 p. y" d7 T/ g7 }7 H
data2 = data(:,end); %data2指的是分类
9 b& y; M4 ` Q% b/ c
data2 = double(dec2bin(data2))-48; %函数名称:dec2bin 函数功能:把一个十进制数转换成一个字符串形式表示的二进制数。
0 N- ~. N: x% S+ Q# S9 T8 \
data = [data1,data2]; %处理后数据
. B$ \, g( S+ M, B2 r1 {
[trainV,valV,testV] = dividevec(data1',data2',0.0,0.3) %将数据分为训练和测试两类,没有变量数据valV,因此所占百分比是0
( j9 r; n( [1 d2 b
%dividevec()函数在 7.6 版本还可以使用,是把数据进行打乱,并分类为:训练输入数据、变量数据、测试数据的方法。0.5为测试数据百分比
* X: }/ p1 @5 x7 y: r' W
%% -----------------数据归一化处理----------
9 `7 t" H6 Y' }2 [/ ?; f/ ]8 y9 J
[input1,ps] = mapminmax(trainV.P,-1,1); %由于mapminmax是按行归一化,行表示属性 列表样本个数
1 S7 Z+ @: L2 @
[input2,ps] = mapminmax(testV.P,-1,1);
* O' |, `5 T( G% ~3 e
%% -----------------构造输出矩阵----------
; X0 J4 I& {7 y, G8 S2 c2 j
output1 = trainV.T;
$ L' }: t) j( s7 ]( e) B$ c
output2 = testV.T;
2 ?" I$ h0 V6 J" H3 d- ]
( S9 i7 y+ ~; p- b& C/ E3 }
%% ----- 建立网络--------------
% ?3 l1 \# Q6 w5 G% h: {2 V
net = newff(input1,output1, [10 3]); %[10,3]表示有两层隐层,第一层隐层节点为10,第二层隐层节点为3
) i6 o% Z9 ?. U3 c; r1 F' V G
%设置训练参数
% u* I6 W3 H; ] C Q4 d6 Y
net.trainParam.epochs=800; %训练次数
5 Z2 U8 u5 B/ x3 h
net.trainParam.goal=0.005; %网络性能目标
0 Z/ _, p3 |. f9 R, ~( T
net.trainParam.show=NaN; % 两次显示之间的训练次数,NaN表示不显示,默认是25.该参数的设置对程序没有影响。
6 z6 `! E% y1 s/ n
net.trainParam.lr=0.01; %学习训练速度
( q4 D- a% q* F7 `9 W' [% @% H
9 v- a0 {9 U9 p' o8 R6 \+ ^2 L( L$ C
%% ----- 训练网络 --------------
, ]! n: F4 |# o
net = train(net,input1,output1);
. X. {7 }. [+ X/ _
%% ----- 仿真网络 --------------
+ q4 U, p! I' c
output_fact = sim(net,input2); %注意sim仿真网络直接输出的并不是整数形式,而是很贴近整数的小数形式,因此要做相应的变化
" [; y0 l! ~6 D ~3 u# o4 ? T6 a
output_fact(output_fact>=0.5) = 1;
8 d- V& A' M+ B. r3 b! }' n4 A* F
output_fact(output_fact<0.5) = 0;
2 G3 Z0 v7 p2 {8 a* O# r2 i$ J/ M
N = length(testV.P);
: O4 _! S( O0 Q/ F5 c0 L9 B- m
output_class = sum(output_fact.*[ones(1,N)*2;ones(1,N)*1],1);
( c/ W% [7 r( q p7 p
output2 = sum(output2.*[ones(1,N)*2;ones(1,N)*1],1);
$ @& k+ z$ V9 b+ t( Q7 ^1 l
correct_rate = sum(output_class == output2)/N;
) j9 ~! P* _2 W6 H3 n; y
sprintf('识别率是 %3.3f%%',correct_rate*100);
6 S3 }4 k$ n3 e& q
6 g2 j" {2 T6 u
问题描述:
( L* @; O* c& h/ ^9 |
1.jpg
(45.44 KB, 下载次数: 7)
下载附件
保存到相册
2020-5-9 15:52 上传
' c+ x T8 K) c f
上图为BP神经网络结构图,上述代码是想将数据分为3类,我想将这儿的输出层2个节点改为3个节点,该怎么修改?请教大神,非常感谢!
作者:
mnfvbnk
时间:
2020-5-9 16:31
神经网络太难了,我们用的都是i简单的功能
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2