首页 » C++ » C++ 语言实现 BP 神经网络实例,手把手一句一句敲代码实现训

C++ 语言实现 BP 神经网络实例,手把手一句一句敲代码实现训

原文 http://blog.csdn.net/Ryuchong/article/details/78103788

2017-09-26 18:20:36阅读(621)

楼主也是最近才刚刚接触神经网络的菜鸟,但是往往初学者才懂得初学者的痛点。在学习过程中,很多东西楼主也是不求甚解,以“会用”为主,相信在使用的过程中,很多不明白的东西,也会渐渐了解了。跌跌撞撞,花了一个星期的时间,楼主把目前用的非常多的 BP 神经网络用C++封装成了几个类,测试效果还可以,发出来分享下,也顺便简要介绍下我对BP神经网络的了解,可能有些地方说的不准确,但是可以给以后的自己做个备忘,也可以给很多其他刚接触神经网络的同学一点参考。

先贴个简单的调用案例,让大家有个比较直观的印象。

	LCCBPNET net;		// 结构体,神经网络的一些参数
        net.nIn = 2;
        net.nHidden = 3;
        net.nOut = 1;
        net.loopTimes = 2000;
        net.eta = 0.6;
        net.mc = 0.8;
        net.tolerance = 0.01;
        CLccBPNetWork    lccBP(net);		// 关键就是这两句了,这一句是得到一个对象
        lccBP.batchTrain(&trainMx, &eptMx);	// 这一句是训练, trainMx 和 eptMx 是用来训练的矩阵
        lccBP.wIH->printLccMatrix();
        lccBP.wHO->printLccMatrix();		// 这两句是打印出训练好的权值矩阵
	lccBP.testNet(&testMx, &epttestMx);	// 训练好以后,就可以测试了,testMx是测试矩阵, epttestMx 是神经网络输出的矩阵	

更多细节,楼主会慢慢说清楚。

人工神经网络是一种类似于人类神经系统的信息处理技术。事实上,神经网络包含很多种,最常用的一种被成为 BP 神经网络,它是一种以误差反向传播为基础的前向网络,具有非常强的非线性映射能力。神经网络的用处非常多,比较常见的用途有:模式识别,逼近,回归,压缩等。

通常,人类自身就是一个极好的模式识别系统,当视野中出现一张熟悉的人脸时,只需数百毫秒的时间即可正确识别。就连昆虫神经系统虽然并不发达,但仍表现出极强的识别能力。一般认为,生物神经并不是一开始就具备这样的识别能力的,而是在其成长过程中通过学习逐步获得的。随着生物的成长,大脑接收了大量的环境信息,神经元之间的相互联系不断变化,从而完成只能、思维、情绪等精神活动。下图是神经元的结构,A是轴突,D为树突,P为细胞体。不同的神经元的连接是靠突触实现的,信号从一个神经元的轴突传递到另一个神经元是有向的传播。


C++ <a href=语言实现 BP 神经网络实例,手把手一句一句敲代码实现训" src="" alt="">

下图的是BP神经网络的一种简单示意图,分为输入层、隐藏层和输出层,各层的连接可以通过权值矩阵调整。可以看出,这种结构跟神经细胞连接很像,可以用这种结构来模拟生物的神经系统,实现一定的功能。

C++ 语言实现 BP 神经网络实例,手把手一句一句敲代码实现训

在神经网络中,最重要的概念莫过于神经元节点与权值,节点对应细胞体,权值表示节点间相互连接的强度。权值是可以调整的,当权值调整至恰当值时,就能输出正确的结果。网络将只是存储在调整后的各个权值中,这一点是神经网络的精髓。



下班了。。。先写到这









最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹