[实验目的]

        本实验要求掌握前向型神经网络的基本工作原理及利用反向传播确定权系数的方法,并能设计相应的BP神经网络,实现对非线性函数的逼近与拟合,并分析影响函数拟合效果的相关因素。

[实验要求]

在规定期限独立完成实验内容编程语言用C语言或MATLAB实现

[实验内容]

        设计BP神经网络的基本结构与激励函数,实现对非线性函数y=sin(x)的逼近与拟合,并分析影响函数拟合效果的相关参数(包括激励函数的选择sigmoid、线性函数、权系数的初值、步长的大小、训练样本的多少等),并对比实验效果。 

 

算法步骤

 

 

步骤1:确定前馈网络结构,并给出所有参数的定义。 步骤2:将网络中所有加权系数的初始值设置为较小的分布在0~1之间的随机数。 步骤3:给定一组输入向量和期望的目标输出向量 ,其中 p =1,2,..., N ,表示共有 N 个训练样本;令 p =1。

步骤4:输入信号并进行正向传播过程,即根据式2.13计算隐含层和输出层的实际输出,得到和 。

步骤5:根据式计算期望值与实际输出值的均方差 。 步骤6:进行误差反向传播过程,即根据式(2.16)计算加权系数的修正值和 ,并根据式(2.15)调整各层的加权系数。

步骤7:返回步骤4重复计算,直到输出误差满足给定的要求或权值不再变化。 步骤8:令 p = p +1,返回步骤了重复计算,直到所有输出误差满足给定的要求或所有样本对应的网络权值不再变化。

2. 源代码

k=1;

n=10;

P=[-1:0.05:1];

T=sin(k*pi*P);

plot(P,T,'-')

title('要逼近的非线性函数');

xlabel('输入变量');

 

ylabel('非线性函数目标输出向量');

net=feedforwardnet(n,'trainlm');

net.layers{1}.transferFcn = 'tansig';

net.layers{2}.transferFcn = 'purelin';

net=configure(net,P,T);

y1=sim(net,P);

net.trainParam.epochs=50;

net.trainParam.goal=0.01;

net=train(net,P,T);

y2=sim(net,P);

figure;

plot(P,T,'-',P,y1,'--',P,y2,'*')

title('训练前后的网络仿真结果对比');

xlabel('输入向量');

ylabel('输出向量');

legend('目标函数输出向量','未训练BP网络输出','已训练BP网络输出');

 

3. 运行结果(界面截图)

(1)要逼近的非线性函数曲线

 (2) 训练后的网络输出及比较

(3) 网络训练结果信息界面

 (4) 网络图

 

 

 

 

4. 相关参数分析

隐含层节点数为10,输出节点数为1,隐含层传递函数选取S型切函数tansig,输出层选取纯线性函数purelin。MATLAB R2020b的人工神经网络工具箱在net的layer属性中,须设置每层的传递函数(Transfer Function),BP网络训练幽数选取trainlm函数,其可使训练速度尽能快(往:如果计算机内存不够大,则不建议采用trainlm函数,建议采用训练函数trainbfg或trainrp,以避免出现死机情况;本例中便用的计算机内存为8GB)。正弦函数频率设置为1。

 实验总结:

        从仿真结果图中可以看出,未经训练的 BP 网络输出与目标的数差距很大,逼近效果很不理想,而对 BP 网络进行训练之后,其输出可以较精确地逼近目标函数。从网络训川练结果信息界面中可以直观地看到所创建的神经网络结构、所采用的训练函数、训练过程以及网络的性能。函数逼近效果和网络训练的收敛速度,同原始非线性函数的频率、 BP 网络隐含层神经元的数目以及 BP 网络训练函数的选取等都有关。通过观察他们对网络性能的影响可以发现,非线性函数的频率越高,其对网络的要求也越高;而且,并非网络隐含层神经元的数目越多,逼近效果就越好。

注意重点:

(1) 程序的编辑不要直接在Command的Window中进行,最好新建一个窗口,编写.m文件,以防止语法错误等导致死循环或死机现象出现

(2) .m文件保存位置要记清,在错误的路径下是无法打开所需要的文件

 

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: