如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc

如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc

ID:55915157

大小:474.97 KB

页数:18页

时间:2020-06-14

如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc_第1页
如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc_第2页
如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc_第3页
如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc_第4页
如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题.doc_第5页
资源描述:

《如何用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次迭代学习

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。