你好,我做的bp网络中,前2行的数据输入与第一个输出对应,后2行的和第2个对应,这个应该怎么写程序呢?
求一用matlab编的程序
P=[。。。];输入T=[。。。];输出
% 创建一个新的前向神经网络
net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')
% 当前输入层权值和阈值
inputWeights=net_1。
IW{1,1}
inputbias=net_1。b{1}
% 当前网络层权值和阈值
layerWeights=net_1。LW{2,1}
layerbias=net_1。
b{2}
% 设置训练参数
net_1。trainParam。show = 50;
net_1。trainParam。lr = 0。05;
net_1。trainParam。
mc = 0。9;
net_1。trainParam。epochs = 10000;
net_1。trainParam。goal = 1e-3;
% 调用 TRAINGDM 算法训练 BP 网络
[net_1,tr]=train(net_1,P,T);
% 对 BP 网络进行仿真
A = sim(net_1,P);
% 计算仿真误差
E = T - A;
MSE=mse(E)
x=[。
。。]';%测试
sim(net_1,x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
不可能啊 我2009
28
clear;
%用bp网络,首先对数据分组:
%假设从当年起后3年的需水量和前十年有关。
即第十一,十二,十三年的需水量由第一年到第十年确定,第十二,十三,十四年的需水量由第二年到第十一年确定。。。
%则:输入量
p=[6235 6897 7012 7023 7289 7896 7589 7986 7998 8012;
6897 7012 7023 7289 7896 7589 7986 7998 8012 8123 ;
7012 7023 7289 7896 7589 7986 7998 8012 8123 8456;
7023 7289 7896 7589 7986 7998 8012 8123 8456 8498;
7289 7896 7589 7986 7998 8012 8123 8456 8498 8654;
7896 7589 7986 7998 8012 8123 8456 8498 8654 8723;
7589 7986 7998 8012 8123 8456 8498 8654 8723 8923;
7986 7998 8012 8123 8456 8498 8654 8723 8923 10093;
7998 8012 8123 8456 8498 8654 8723 8923 10093 11626;
8012 8123 8456 8498 8654 8723 8923 10093 11626 11536;
8123 8456 8498 8654 8723 8923 10093 11626 11536 11276;
8456 8498 8654 8723 8923 10093 11626 11536 11276 9606;
8498 8654 8723 8923 10093 11626 11536 11276 9606 8769 ;
8654 8723 8923 10093 11626 11536 11276 9606 8769 8068;
8723 8923 10093 11626 11536 11276 9606 8769 8068 7541;
8923 10093 11626 11536 11276 9606 8769 8068 7541 9717];
%对应输出量:
t=[8123 8456 8498;
8456 8498 8654;
8498 8654 8723;
8654 8723 8923;
8723 8923 10093;
8923 10093 11626;
10093 11626 11536;
11626 11536 11276 ;
11536 11276 9606;
11276 9606 8769;
9606 8769 8068;
8769 8068 7541;
8068 7541 9717;
7541 9717 8886;
9717 8886 9287;
8886 9287 9710;];
%对数据进行归一化(即缩放到0,1之间),P,T分别为归一化后的输入量和输出量
for i=1:16
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
for i=1:16
T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));
end
%选取前14组数据训练网络,第15,16组用来测试训练好的网络。
PP=[P(1,:);P(2,:);P(3,:); P(4,:);P(5,:);P(6,:);P(7,:);
P(8,:);P(9,:);P(10,:); P(11,:);P(12,:);P(13,:);P(14,:)];
Ptest=[P(15,:);P(16,:)]';
TT=[T(1,:);T(2,:);T(3,:); T(4,:);T(5,:);T(6,:);T(7,:);
T(8,:);T(9,:);T(10,:); T(11,:);T(12,:);T(13,:);T(14,:)];
Ttest=[T(15,:);T(16,:)]'
PP=PP'
TT=TT'
%s是隐层单元数,用for循环试试3种隐层
s=[10,15,18];
res=1:3;
for i=1:3
net=newff(minmax(PP),[s(i),3],{'tansig','logsig'},'trainlm');
net。
trainParam。epochs=500;
net。trainParam。goal=0。0001;
net=train(net,PP,TT);
y=sim(net,PP);
error=y-TT;
res(i)=norm(error);
end
%用Ptest测试训练好的网络效果。
Y=sim(net,Ptest)
Ttest =
1。0000 0
0 0。4867
0。4826 1。0000
Y =
0。
0000 0。0000
0。9974 0。9990
0。9985 1。0000
你看看这个别人的例题。