神经网络程序
- 格式:doc
- 大小:50.50 KB
- 文档页数:2
程序代码如下所述,“//”后所述是对程序的解释。
X=[0 1 0.9 0.8 0.7 0 1 0; 0.6 0.7 1 0.4 0 0.6 0.7 0.9]; //训练样本中输入层数据,矩阵X 中行数表示输入层神经元个数,也即指标体系中底层指标个数;列数表述样本个数。
本例选取了8个样本,每个样本有2个底层指标。
Z=[6.68 7.02 8.27 9.43 10.38 6.82 7.09 8.77];
//训练样本中输出层数据,矩阵Z 中行数表示输出层神经元个数,也即指标体系中第一层指标个数;列数表述样本个数。
本例选取了8个样本,每个样本有1个第一层指标。
s=4:13;
//设定隐含层神经元数目,本例选择4到13个,最终模型选取使预测值与真实值误差最小的隐含层神经元数目。
res=1:10;
//设定一个长度为10的数组,用于储存预测值与真实值误差。
for i=1:10;
//设定循环,分别按照选取的10个不同的隐含层神经元数目,训练10个BP 神经网络模型。
net=newff(minmax(X),[s(i),1],{'tansig','purelin'},'traincgf');
//newff ——构造BP 神经网络。
//minmax(X)——取矩阵X 中的最小值和最大值。
//s(i)——取数组s 中第i 个元素,作为BP 神经网络中隐含层节点数。
//1——设定BP 神经网络中输出层神经元数目为1。
//tansig ——隐含层的网络传递函数,tan ()sig x 相当于函数
2
11exp(2)
y x =-+-,也可选取其他函数,如log ()sig x ,相当于函数2
1exp(2)y x =+-;log (,)d sig x y ,相当于函数(1)y x x =*-;tan sin(,)d x y ,相当于函数21y x =-;()purelin x ,相当于函数y x =。
//purelin ——输出层的网络传递函数。
//traincgf——设定训练函数,traincgf 为Fletcher-Reeves共轭梯度法的训练函数,也可选取其他其他BP算法,如'
Polak-Ribi e re共轭梯度法的训练函数,traincgp;动量下降法的训练函数traingdx。
net.trainParam.epochs=2000;
//设定最大训练次数为2000,缺省为100。
net.trainParam.goal=0.001;
//训练要求精度为0.001,缺省为0。
net=train(net,X,Z);
//训练神经网络,训练后得到的BP神经网络命名为net。
Test_Z=sim(net,X);
//把训练样本X代入训练完的神经网络,得到的结果命名为Test_Z,用于比较不同的隐含层节点数训练得出的网络的精确度。
error=Test_Z-Z;
//预测值与真实值的误差。
res(i)=norm(error)
//求数组error中个元素平方和的平方根。
End
经过比较由不同隐含层节点数训练的BP神经网络的预测值与真实值的误差,选取其中误差值最小的BP神经网络模型,假设为8,则把
net=newff(minmax(X),[s(i),1],{'tansig','purelin'},'traincgf')中的s(i)修改为8;训练BP神经网络模型,之后根据待评价对象底层指标评价对象。
程序代码如下:X=[0 1 0.9 0.8 0.7 0 1 0; 0.6 0.7 1 0.4 0 0.6 0.7 0.9];
Z=[6.68 7.02 8.27 9.43 10.38 6.82 7.09 8.77];
net=newff(minmax(X),[8,1],{'tansig','purelin'},'traincgf');
net.trainParam.epochs=2000;
net.trainParam.goal=0.001;
net=train(net,X,Z);
X1=[0.8;0.7]
//评价对象底层指标值。
Z1=sim(net,X1)
//评价对象的评估值。