第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > matlab里performance 关于神经网络performance图的问题

matlab里performance 关于神经网络performance图的问题

时间:2022-09-07 23:24:16

相关推荐

matlab里performance 关于神经网络performance图的问题

请问,在epoch2 的地方为什么折线上升,这样的结果对应的网络是不是很烂。

程序如下:

{/

%run plethora of tests

clear;

clc;

close all

%load the twonorm dataset

inputs=xlsread('4s_acceleration_input.xlsx','mean');

outputs=xlsread('4s_output.xlsx');

%modify so that training data is NxD and labels are Nx1, where N=#of

%examples, D=# of features

X = inputs';

Y = outputs';

All_error=[];%所有误差存储

%---------------------------------------------------

%原始数据

%---------------------------------------------------

%time=1;2;%数据是从以2s为间隔的30s内的数据

p=X;%输入数据,共15组,每组3个输入

t=Y;%输出数据,共15组,每组1个输出

%---------------------------------------------------

%数据归一化处理

%mapminmax函数默认将数据归一化到[-1,1],调用形式如下

%[y,ps] =%mapminmax(x,ymin,ymax)

%x需归化的数据输入

%ymin,ymax为需归化到的范围,不填默认为归化到[-1,1]

%y归一化后的样本数据

%ps处理设置,ps主要在结果反归一化中需要调用,或者使用同样的settings归一化另外一组数据

%---------------------------------------------------

[normInput,ps] = mapminmax(p);

[normTarget,ts] = mapminmax(t);

%---------------------------------------------------

%数据乱序,及分类处理

%将输入的15组数据的20%,即3组,用来作为测试数据;

% 样本的20%,即3组,用来作为变化数据;

%另外9组用来正常输入,用来训练;

%dividevec()用来重新随机抽取上述三种分类的数据,原来的顺序被打乱

%函数调用的语法

%[trainV,valV,testV] = dividevec(p,t,valPercent,testPercent)

%输入p为输入数据,t为输出数据

%valPercent为训练用的变化数据在总输入中的百分比

%testPercent为训练用的测试数据在总输入中的百分比

%输出trainV,valV,testV分别为按乱序及相应百分比,抽取得到的数据

%另外,打乱后的数据,p和t都是对应的,请放心使用

%---------------------------------------------------

testPercent = 0.20; % Adjust as desired

validatePercent = 0.20; % Adust as desired

[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);

for j=1:200

%---------------------------------------------------

% 设置网络参数

%---------------------------------------------------

NodeNum1 = 20;% 隐层第一层节点数

NodeNum2=35; % 隐层第二层节点数

TypeNum = 1; % 输出维数

TF1 = 'purelin';

TF2 = 'purelin';

TF3 = 'tansig';

%各层传输函数,TF3为输出层传输函数

%如果训练结果不理想,可以尝试更改传输函数,以下这些是各类传输函数

%TF1 = 'tansig';TF2 = 'logsig';

%TF1 = 'logsig';TF2 = 'purelin';

%TF1 = 'tansig';TF2 = 'tansig';

%TF1 = 'logsig';TF2 = 'logsig';

%TF1 = 'purelin';TF2 = 'purelin';

net=newff(minmax(normInput),[NodeNum1,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建

%---------------------------------------------------

% 设置训练参数

%---------------------------------------------------

net.trainParam.epochs=10000;%训练次数设置

net.trainParam.goal=1e-25;%训练目标设置

net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛

%---------------------------------------------------

% 指定训练参数

%---------------------------------------------------

% net.trainFcn = 'traingd'; % 梯度下降算法

% net.trainFcn = 'traingdm'; % 动量梯度下降算法

%

% net.trainFcn = 'traingda'; % 变学习率梯度下降算法

% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法

%

% (大型网络的首选算法)

% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小

%

% (共轭梯度算法)

% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法

% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大

% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大

%

% (大型网络的首选算法)

%net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多

% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快

% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大

%

% (中型网络的首选算法)

%net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快

% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法

%

% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

net.trainfcn='traingdm';

[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);

%---------------------------------------------------

% 训练完成后,就可以调用sim()函数,进行仿真了

%---------------------------------------------------

[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t

[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t

[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t

%---------------------------------------------------

% 仿真后结果数据反归一化,如果需要预测,只需将预测的数据P填入

% 将获得预测结果t

%---------------------------------------------------

trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t

trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t

validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t

validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t

testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t

testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t

%绝对误差计算

absTrainError = trainOutput-trainInsect;

absTestError = testOutput-testInsect;

error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);

All_error=[All_error error_sum];

eps=0.3;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别

if ((abs(absTestError(1))<=0.1 )&(abs(absTestError(2))<=0.1)&(abs(absTestError(3))<=0.1)|(error_sum<=eps))

save('training_net.mat','net','tr');

break

end

j

end

j

Min_error_sqrt=min(All_error)

testOutput;

testInsect;

}

数据在附件里面

11.jpg

(34.38 KB, 下载次数: 15)

-2-18 14:19 上传

神经网络分类的performance图

22.jpg

(25.54 KB, 下载次数: 9)

-2-18 14:19 上传

神经网络分类的fail图

-2-18 14:24 上传

点击文件名下载附件

64 KB, 下载次数: 440

-2-18 14:24 上传

点击文件名下载附件

9.83 KB, 下载次数: 381

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。