close all
clear all
clc
%把数据导入到MATLAB程序里
data1=xlsread('D:\matlab\work\3-6nopower\data1.xls','sheet3','A1:I100');
rawX1=data1(1:18,1:4);
rawY1=data1(1:18,5:9);
rawX2=data1(19:36,1:4);
rawY2=data1(19:36,5:9);
rawX3=data1(37:54,1:4);
rawY3=data1(37:54,5:9);
rawX4=data1(55:72,1:4);
rawY4=data1(55:72,5:9);
rawX5=data1(73:90,1:4);
rawY5=data1(73:90,5:9);
%定义输入向量和目标向量
xdata=[rawX1' rawX2' rawX3' rawX4'];
ydata=[rawY1' rawY2' rawY3' rawY4'];
inputs=xdata;
targets=ydata;
%创建一个模式识别网络(两层BP网络)
%中间层神经元的个数20
hiddenLayerSize=20;
net=patternnet(hiddenLayerSize);
%对数据进行预处理,归一化函数(一般不用修改)
%For a list of all processing functions type;help nnprocess
net.inputs{1}.processFcns={'removeconstantrows','mapminmax'};
net.outputs{2}.processFcns={'removeconstantrows','mapminmax'};
%把训练数据分成三部分,训练网络、验证网络、测试网络
%For a list of all data division functions type;help nndivide
net.divideFcn='dividerand';%Divide data randomly
net.divideMode='sample';%Divide up every sample
net.divideParam.trainRatio=80/100;
net.divideParam.valRatio=10/100;
net.divideParam.testRatio=10/100;
%训练函数
%For a list of all training functions type;help nntrain
net.trainFcn='trainlm';%Levenberg-Marquardt
%使用均方误差来评估网络
%For a list of all performance functions type;help nnperformance
net.performFcn='mse';%Mean squared error
%画图函数
%For a list of all plot functions type;help nnplot
net.plotFcns={'plotperform','plottrainstate','ploterrhist','plotregression','plotfit'};
%开始训练网络(包括了训练和验证的过程)
[net,tr]=train(net,inputs,targets);
%测试网络
outputs=net(inputs);
errors=gsubtract(targets,outputs);
performance=perform(net,targets,outputs);
%获得训练、验证和测试的结果
trainTargets=targets .* tr.trainMask{1};
valTargets=targets .* tr.valMask{1};
testTargets=targets .*tr.testMask{1};
trainPerformance=perform(net,trainTargets,outputs);
valPerformance=perform(net,valTargets,outputs);
testPerformance=perform(net,testTargets,outputs);
%可以查看网络的各个参数
%veiw(net)
%根据画图的结果,决定是否满意
%Uncomment these lines to enable various plots.
figure,plotperform(tr)
figure,plottrainstate(tr)
figure,plotconfusion(targets,outputs)
figure,ploterrhist(errors)
%Test the Network
z=data1(91:100,1:4);
testinputs=z';
testoutputs=net(testinputs);
%如果对训练满意,可以保存训练好网络
save('training_net.mat','net','tr');
评论0