📄 netb.m
字号:
%本程序为中间层(隐含层)神经元个数测试程序,请综合考虑训练次数与测试结果方差选择神经元个数
%环境初始化
clear
clc
close all
%K是测试误差数据的条数
K=3;
%indata是训练数据(全部R行)和测试数据(最后K行)的输入变量和目标输出,按行排列,每行前Q-1个位输入,第Q个为目标输入(预测数据目标输出可以设为0)
indata=[0.4 450 -5 40 12 80 49 0.86 -6 0.02 180 3.5 1;
0.3 138 5 40 3 120 41 0.87 -3 0.03 240 5.6 1;
0.18 1200 -20 30 6 75 43 0.88 -5 0.01 170 3.5 1;
0.5 200 -20 30 12 90 45 0.89 -12 0.02 165 2.7 1;
0.45 400 -20 30 12 60 41 0.87 -4 0.03 170 3.6 1;
0.44 450 -20 30 12 45 41 0.85 -13 0.02 220 3.6 1;
0.4 200 -10 30 6 60 46 0.85 -10 0.01 145 3 1;
0.463 260 -15 25 12 75 40 0.86 -13 0.005 155 4.4 1;
0.44 560 -10 25 12 85 46 0.89 -1 0.03 195 5.5 1;
0.3 300 -5 25 12 75 41 0.87 -14 0.02 180 4.7 1;
0.5 370 -30 30 12 80 45 0.88 -17 0.01 165 3.9 1;
0.3 225 -15 25 12 90 41 0.86 -5 0.01 170 3.8 1;
0.32 365 5 40 24 80 49 0.89 -2 0.03 210 5.5 1;
0.35 200 5 40 12 75 45 0.85 -5 0.04 170 3.5 1;
0.412 350 -25 35 12 75 40 0.91 -5 0.07 270 5.5 0;
0.51 90 0 35 12 80 45 0.87 -13 0.02 165 2.2 0;
0.105 110 0 35 12 95 44 0.88 -4 0.01 185 5.7 0;
0.41 250 -20 30 12 245 44 0.84 -6 0.01 155 4.8 0;
0.156 110 -25 30 12 150 35 0.85 -2 0.02 160 2.9 0;
0.148 70 -25 25 12 140 37 0.84 -11 0.03 190 3.5 0;
0.238 130 -20 25 12 120 33 0.83 -15 0.01 185 6.7 0;
0.268 120 -20 30 12 110 41 0.87 -7 0.02 190 5.4 0;
0.434 140 -20 25 12 65 36 0.88 -8 0.01 170 8.3 0;
0.2322 200 -15 35 12 70 44 0.85 -15 0.02 190 7.1 0;
0.299 130 -20 30 12 70 39 0.85 -10 0.01 185 4.4 0;
0.175 210 5 40 12 55 40 0.86 3 0.01 240 4 0;
0.45 100 -5 30 12 75 35 0.84 -6 0.04 215 2.7 0;
0.425 90 -30 30 12 80 37 0.88 4 0.02 200 3.5 0;
0.517 80 -30 30 12 180 42 0.87 -1 0.01 155 5.1 0;
0.592 110 -30 30 12 110 40 0.85 2 0.02 160 4.4 0;
0.18 140 -20 35 12 40 46 0.88 -21 0.01 185 4.8 0;
0.4 115 -20 30 12 55 46 0.88 -8 0.02 185 4.6 0;
0.1953 260 -5 40 12 60 47 0.89 -18 0.01 190 2.6 0;
0.3 150 0 40 12 95 42 0.85 -15 0.02 185 2.7 0;
0.35 110 -5 30 12 90 39 0.84 -2 0.01 160 4.1 0;
0.47 95 -20 30 12 65 38 0.86 5 0.03 200 5.7 0;];
indata=predepose(indata);
%R是indata行数,Q是indata列数
[R,Q]=size(indata);
%提取输入变量,并转置
p=indata(:,1:Q-1)';
%提取目标输入
t=indata(:,Q)';
%数据预处理,进行归一化,已使用predepose函数代替
% for i=1:Q-1
% P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
% end
P=p;
%提取测试输入
P_test=P(:,R-K+1:R);
%提取测试目标输入
T_test=t(:,R-K+1:R);
%Test_b中间层神经元起始测试个数
Test_b=7;
%Test_e中间层神经元终止测试个数
Test_e=15;
for i=Test_b:Test_e
%创建一个BP网,隐含层有i个神经元,传递函数为logsig,输出层有1个神经元,传递函数为purelin,训练函数为trainlm
net = newff(minmax(P),[i,1],{'tansig' 'purelin'},'trainlm');
%设置训练步数
net.trainParam.epochs =2000;
%目标误差
net.trainParam.goal=1e-5;
%确认失败的最大次数
net.trainParam.max_fail=20;
%最小性能梯度
net.trainParam.min_grad=1e-20;
%初始化网络
net=init(net);
%进行训练
net=train(net,P,t);
%进行测试
Temp=sim(net,P_test);
y(i-Test_b+1,:)=Temp;
end
for i=1:(Test_e-Test_b+1)
errors(i,:)=abs(y(i,:)-T_test(1,:));
end
for i=1:(Test_e-Test_b+1)
figure
plot(1:K,errors(i,:))
title(['中间层',int2str(i+Test_b-1),'个神经元,误差方差为',num2str(norm(errors(i,:)'))])
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -