.
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/2 Y(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 //输入向量维数
..
如何用C语言编程实现多层前向BP神经网络,用来解决逻辑 XOR 运算和奇偶检验问题



