Degg 2019-04-27 19:38
浏览 329

BP神经网络法负荷预测,这段代码的输出神经元为什么是5个?隐含层神经元为什么为27个?

***小白,有很多还没搞懂,这段代码用了14天的负荷数据作为样本集(一天有288个数据,每5分钟一个数据),不能理解输入层神经元为什么设为5个,或者说这段代码就没怎么看懂,要是输入层神经元为5个,那根据一般规则隐含层神经元应该为11个啊,求大家帮我解释一下,这个输入是前五天负荷数据吗?预测的又是哪一天的负荷数据?

clc
clear
close all
for i=1:14
    str=['201010' num2str(i,'%02d'),'.镇江地区.txt']

    data(:,i)=load('20101001.镇江地区.txt');
% A=load('20101001.镇江地区.txt');
end

data=data(4:end,:);

% P0=[data(:,1:2);data(:,2:3);data(:,14:18)];
p_train=[];
t_train=[];
for i=1:7
    p_train=[p_train;data(:,0+i:4+i)];
    t_train=[t_train;data(:,5+i)];
end


p_test=[];
t_test=[];
for i=8:8
    p_test=[p_test;data(:,0+i:4+i)];
    t_test=[t_test;data(:,5+i)];
end



%*********************************

%% 数据归一化
% 训练集
[pn_train,inputps1] = mapminmax(p_train',0,1);
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps1);
pn_test = pn_test';
% 测试集
[tn_train,outputps1] = mapminmax(t_train',0,1);
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps1);
tn_test = tn_test';

%%BP 神经网络进行预测得代码
% 数据转置
pn_train = pn_train';
tn_train = tn_train';
pn_test = pn_test';
tn_test = tn_test';

net=newff(minmax(pn_train),[27,1],{'tansig' 'purelin'} ,'traingda');%logsig
% 设置训练参数
net.trainparam.epochs = 4000;
net.trainparam.goal = 0.0001;
net.trainparam.show = 10;
net.trainparam.lr = 0.1;
% 训练网络
net = train(net,pn_train,tn_train);

% 仿真测试
Predict_1 = sim(net,pn_train);
Predict_2 = sim(net,pn_test);



% % 反归一化
predict_1 = mapminmax('reverse',Predict_1,outputps1)';
predict_2 = mapminmax('reverse',Predict_2,outputps1)';
% 结果对比

figure()
plot(1:length(t_train),t_train,'r-','LineWidth',2);
hold on
plot(1:length(t_train),predict_1,'b:o','LineWidth',2)
% grid on
legend('Train真实值','预测值')
title('训练对比图');

figure()
plot(1:length(t_train),t_train-predict_1,'r','LineWidth',0.5);
title('训练误差');



figure()
plot(linspace(1,24,288),t_test,'r-','LineWidth',2);
hold on
plot(linspace(1,24,288),predict_2,'b:o','LineWidth',2)
% grid on
legend('Test真实值','预测值')
title('测试对比图');
xlim([1 24]);

figure()
plot(linspace(1,24,288),t_test-predict_2,'r','LineWidth',2);xlim([7 21]);
title('测试误差');

figure()
plot(linspace(1,24,288),(t_test-predict_2)./predict_2,'r','LineWidth',2);xlim([7 21]);
title('相对误差');



E1=mse(t_train - predict_1);
E2=mse(t_test - predict_2);

R1=corr2(t_train,predict_1);
R2=corr2(t_test,predict_2);

mape2=mape(t_test,predict_2);


%注index有指标的含义
RBF_index.E2=E2;
RBF_index.R2=R2;
RBF_index.mape2=mape2;


fprintf('BP测试MSE=%4f\n',E2);
fprintf('BP测试相关性=%4f\n',R2);
fprintf('BP测试平均相对误差(Mape)=%4f\n',mape2);
RBF_ouput=predict_2;

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波
    • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
    • ¥15 钢筋实图交点识别,机器视觉代码
    • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
    • ¥50 400g qsfp 光模块iphy方案
    • ¥15 两块ADC0804用proteus仿真时,出现异常
    • ¥15 关于风控系统,如何去选择