与数据库连接好以后就可进行网络的自学习过程来训练出网络每层的权值与阈值。使用random阵列来产生网络的初始权值与阈值。为了避免神经网络过训练我们采用交互检验法:即将我们数据库中的实测数据分为训练集、检验集和测试集。首先用训练集训练网络,依照BP算法调整网络结构和参数;然后用检验集检验训练好的网络,进一步优化网络结构和参数,最终确定训练网络中最佳的一个;最后用测试集对未知样本进行测试并检验网络的计算精度。下面是学习及预测过程的m语言实现:
Matrix=zeros(30,width);
NeuralI=100;
InData=zeros(NeuralI,6);
GoalData=zeros(6,6);
Neuralo=6;
[R,Q]=size(InData);
[S2,Q]=size(GoalData);
S1=6;
[w1b1]=rands(S1,R);
[w2b2]=rands(S2,S1);
max_epoch=400;%最大训练步数
err_goal=0.01;%训练目标
lr=0.01;%学习速率
NNTWARNOFF
forj=1:width
P=PingMeiWaterBase(j,1:end);
simdata=P(end-NeuralI+1-31+x:end-31+x)’;
fori=1:Neuralo
InData(:,i)=P(end-NeuralI-Neuralo-1+i:end-Neuralo-2+i)’;
GoalData(:,i)=P(end-2*Neuralo+i:end-Neuralo-1+i)’;
end
fori=1:max_epoch
A1=tansig(w1*Indata,b1);
A2=purelin(w2*A1,b2);
error=GoalData-A2;
D2=deltalin(A2,error);
D1=deltatan(A1,D2);
[dw1,db1]=learnbp(Indata,D1,lr);
[dw2,db2]=learnbp(A1,D2,lr);
w1=w1+dw1;
w2=w2+dw2;
ifsumsqr(error) break;
end
end
temp=purelin(w2*tansig(w1*simdata+b1)+b2)’;
result(j)=temp(end);
end
4 预测值与实际值的比较
