欢迎来到天天文库
浏览记录
ID:55915157
大小:474.97 KB
页数:18页
时间:2020-06-14
《如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、6.(1)试用C语言编程实现多层前向NN的BP算法。要求:输入、输出结点数目,隐层数目,及各隐层中结点的数目应为任意整数。(2)试用所编出的BP算法程序训练出一个实现XOR运算的2层前向网络。(3)用所编出的BP算法程序训练出输入矢量的维数分别为n=7和n=8的两个实现奇偶检验运算(即如题2.(2)所述)的2层前向NN。注:对第6题的要求:(i)列表给出训练收敛后的NN权值和所用的迭代次数;(ii)给出训练收敛后的训练误差和检验误差,及用训练集和检验集做输入时所得到的正确输出率;(iii)给出NN的学习曲线(即E(W(k))随迭代次数k的变化曲线,该结果应是用计算程序计算
2、和打印出来的曲线,而不要是用手画出的曲线)。(1)用C语言编程实现前向NN的BP算法解:解题思路:先用C语言编程实现前向NN的BP算法,再将误差保存至文本文件,最后用MATLAB绘制出误差曲线。(1.1)开发思路奇偶检验问题可视为XOR问题的推广(由2输入到n输入的推广):若n个输入中有奇数个1,则输出为1;若n个输入中有偶数个1,则输出为0。一个2层的NN可实现奇偶检验运算。本文选用2层神经网络,包括隐含层1层,输出层1层,来设计BP神经网络。2层神经网络本文隐含层和输出层的激活函数选用Sigmoid函数,,其函数曲线如下所示:由奇偶检验问题的定义:可定义如下分类函数:
3、其中y为BP神经网络的输出值,Y为分类结果。(1.2)运行流程本文的多层前向NN的BP算法用C语言编程实现,最后将运行结果保存成数据文件,通过MATLAB绘图显示,其运行流程图如上图所示,其源代码见附录部分。(1.3)参数设定输入、输出结点数目,隐层数目,及各隐层中结点的数目应为任意整数,通过宏定义改变相应的值,具体修改方式见《NeuralNetBP.h》文件,在程序运行之前,需要跳转到该文件修改具体的取值。(2)试用所编出的BP算法程序训练出一个实现XOR运算的2层前向网络。解:利用(1)中BP算法程序训练出XOR运算的2层前向网络。(2.1)参数设定首先进入《Neur
4、alNetBP.h》文件通过宏定义改变相应的值,包括输入、输出结点数目,隐层数目,及各隐层中结点的数目。//XOR2#defineIN_COUT2//输入向量维数#defineOUT_COUT1//输出向量维数#defineIMPLY_NUM1//隐含层层数#defineSampleTrain4//训练样本数量#defineSampleTest4//测试样本数量#defineNN_ImplyCout3//隐含层节点数#defineNN_Rate0.5//学习速率#defineNN_Error0.001//精度控制参数#defineNN_LOOP100000//最大循环次数
5、(2.1)程序训练结果对所有样本进行训练,取隐含层节点数为3,运行结果如下:BP神经网络的学习曲线如下:可以看出BP神经网络的误差很快收敛至0。为了测试BP神经网络的有效性,取10次运算的平均值,其正确率如下图所示:定义正确率:其中,A为正确率,n=测试值和真实值相等的数量,N为参与测试的样本数量。由上图可以看出,10次测试的正确率都是A=1,有理由相信,BP神经网络所训练出来的参数是正确的。(2.3)XOR运算使用2层BP神经网络,NN的取隐含层节点数为3,示意图如下所示:两层神经网络实现逻辑异或运算(XOR)的真值表如下所示:x1x2y000011101110计算公式
6、如下:经过28582次迭代后,可求得其权值取值如下:(3)用所编出的BP算法程序训练出输入矢量的维数分别为n=7和n=8的两个实现奇偶检验运算(即如题2.(2)所述)的2层前向NN。解:n=7和n=8的两个实现奇偶检验运算的2层前向NN,完全相同,本文以n=7为例进行说明。(3.1)参数设定首先进入《NeuralNetBP.h》文件通过宏定义改变相应的值,包括输入、输出结点数目,隐层数目,及各隐层中结点的数目。//XOR7#defineIN_COUT7//输入向量维数#defineOUT_COUT1//输出向量维数#defineIMPLY_NUM1//隐含层层数#defi
7、neSampleTrain128//训练样本数量用0-127共128组数据全部参加训练#defineSampleTest128//测试样本数量用0-127共128组数据全部参加测试#defineNN_ImplyCout25//隐含层节点数#defineNN_Rate0.4//学习速率#defineNN_Error0.001//精度控制参数#defineNN_LOOP100000//最大循环次数(3.2)程序训练结果7位2进制数数,共有128个样本,对所有样本进行训练,取隐含层节点数为25,运行结果如下:经过85857次迭代学习
此文档下载收益归作者所有