⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netb.m

📁 生物柴油课题的神经网络方法处理
💻 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 + -