好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

. .

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 的变化曲线,该结果应是用计算程序计算和打印出来的曲线,而不要是用手画出的曲线)。

(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神经网络。

x11w11w121?112w11x2……?122w12?12y……w12nxnw1nn1?n

2层神经网络

本文隐含层和输出层的激活函数选用Sigmoid函数,

d?1??(s)(1??(s)) ,?(s)??sds1?e其函数曲线如下所示:

. . .

. .

由奇偶检验问题的定义: 可定义如下分类函数:

?1 y>=1/2Y(y)??

0 y<1/2?其中y为BP神经网络的输出值,Y为分类结果。

(1.2)运行流程

. . .

. .

本文的多层前向 NN 的 BP 算法用C 语言编程实现,最后将运行结果保存成数据文件,通过MATLAB绘图显示,其运行流程图如上图所示,其源代码见附录部分。

(1.3)参数设定

输入、输出结点数目,隐层数目,及各隐层中结点的数目应为任意整数,通过宏定义改变相应的值,具体修改方式见《NeuralNetBP.h》文件,在程序运行之前,需要跳转到该文件修改具体的取值。

( 2) 试用所编出的 BP 算法程序训练出一个实现 XOR 运算的 2 层前向网络。 解:

利用(1)中BP 算法程序训练出XOR 运算的 2 层前向网络。

(2.1)参数设定

首先进入《NeuralNetBP.h》文件通过宏定义改变相应的值,包括输入、输出结点数目,隐层数目,及各隐层中结点的数目。

//XOR2

#define IN_COUT

2 //输入向量维数

. . .

. .

#define OUT_COUT #define IMPLY_NUM

#define SampleTrain #define SampleTest

1 //输出向量维数 1 //隐含层层数

4 4

//训练样本数量 //测试样本数量 //隐含层节点数 //学习速率

#define NN_ImplyCout 3 #define NN_Rate #define NN_Error #define NN_LOOP

0.5

0.001 //精度控制参数

100000 //最大循环次数

(2.1)程序训练结果

对所有样本进行训练,取隐含层节点数为3,运行结果如下:

BP神经网络的学习曲线如下:

. . .

. .

可以看出BP神经网络的误差很快收敛至0。

为了测试BP神经网络的有效性,取10次运算的平均值,其正确率如下图所示:

. . .

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

..6.(1)试用C语言编程实现多层前向NN的BP算法。要求:输入、输出结点数目,隐层数目,及各隐层中结点的数目应为任意整数。(2)试用所编出的BP算法程序训练出一个实现XOR运算的2层前向网络。(3)用
推荐度:
点击下载文档文档为doc格式
4qez87tfcr4n7xz5eecp3x5if1klf700axk
领取福利

微信扫码领取福利

微信扫码分享