资源下载地址:https://download.csdn.net/download/sheziqiong/85676614
资源下载地址:https://download.csdn.net/download/sheziqiong/85676614

BP 神经网络的实现

实验概述:

1.1 课程设计题目:

本设计题为 BP 神经网络的实现,主要任务是利用 C++ 语言实现 BP 神经网络, 并利用 BP 神经网络解决螨虫分类问题。
1.2 课程设计目的:

主要有这些:

熟悉自己所学的多种数据结构.

理解 BP 神经网络的工作原理

利用 C++ 实现 BP 神经网络

利用 BP 神经网络实现螨虫分类

设定好学习样本个数,取样本个数的训练数据存储于文本文档中,在 C++ main 函数中设定学习效率和步长,读取训练输入和对应的输出进行训练,通过训练得到对应的权值,然后进行数据测试。

一、设计功能:

本课程设计由 3 个主要功能实现,它们分别为初始化数据,训练和测试螨虫分类是否准确。

1.3.3 实验环境与工具:
① 操作系统:Windows 企业版 2016 长期服务版;

② 开发工具:Visual Studio 2017 社区版;

③ 开发语言:C++。

实验原理:

1.1 结构构成:

BP 神经网络是一种根据误差逆向传播的多层前馈网络。其由输入层,隐藏层和输出层构成的。它模拟了人脑的神经网络的结构,众所周知,人大脑传递信息的基本单位是神经元,人脑中有大量的神经元,每个神经元与多个神经元相连接,就是这样,构成了人的大脑。人的大脑的神经网络传播是按照一定的规律,不是神经元会对所有传过来的刺激进行反应。首先是积累刺激,而 BP 神经网络,类似于上述,是一种简化的生物模型。每层神经网络都是由神经元构成的,单独的每个神经元相当于一个感知器。输入层是单层结构的,输出层也是单层结构的,而隐藏层可以有多层,也可以是单层的。输入层、隐藏层、输出层之间的神经元都是相互连接的,为全连接。总得来说,BP 神经网络结构就是,输入层得到刺激后,会把他传给隐藏层,至于隐藏层,则会根据神经元相互联系的权重并根据规则把这个刺激传给输出层,输出层对比结果,如果不对,则返回进行调整神经元相互联系的权值。这样就可以进行训练,最终学会,这就是 BP 神经网络模型。

1.2 算法流程:

① 先把统一处理过的训练样本输入到 BP 神经网络。

② 设定步长,学习效率,最大学习次数,生成初始权值,阈值。

③ 计算从输入层开始到输出层结束的各层的输入输出值。

④ 计算输出层的误差,如果误差小于设定误差,便结束。如果大于设定误差,便调整权值和阈值,执行步骤 ③。

1.3 数学原理:

在三层 BP 神经网络中,输入向量,也就是输入层神经元为:

(1)

隐藏层输入向量,也就是隐藏层神经元:

(4)

输入层到隐藏层之间的权值用数学向量可以表示为

(5)

这里面的列向量

为隐藏层第 j 个神经元对应的权重;隐藏层到输出层之间的权值用数学向量可以表示为:

(6)

式(6)中的列向量

为输出层第 k 个神经元对应的权重。

输入层,隐藏层,输出层之间的数学关系如下所示:

就输出层而言

在上述表达式中,激活函数 f(x)必须为单调函数,我们选取 sigmoid 函数:

(11)

由于 f(x)是连续函数,是可导函数,且

这些就构成了 BP 神经网络的输入层,输出层和隐藏层。

如果 BP 网络的输出结果和期望输出结果不一致时,那么便有了输出误差 E,表达式如下:

(12)

展开到隐藏层,则有如下表达式:

(11)

展开到输入层,则有以下表达式:

(13)

根据这些,我们可以明白,BP 神经网络的输入误差产生是由于输出层到隐藏层的权值和隐藏层到输入层的权值决定,因此调整输出层到隐藏层的权值和隐藏层到输入层的权值可以改变误差 E。

显而易见的,调整输出层到隐藏层的权值和隐藏层到输入层的权值的思想是让这个误差不断缩小这样才能满足我们的要求,因此我们需要让这些权值修改量与误差 E 的负梯度下降量成正比,也就是如下表达式:

二、算法分析:

设输入层神经元数量为 n1,隐藏层神经元数量为 n2,输出层神经元数量为 n3。对于一个测试样本进行前馈计算,则需要进行两次矩阵运算,两次向量和矩阵相乘分别,需要进行 n1 * n2 和 n2 * n3 次计算,由于输入层神经元数量和输出层神经元数量是固定的,只有中间隐藏层的神经元数量是需要自己设定的,因此本算法时间复杂度为 O(n1 * n2 + n2 * n3) = O(n2)。

对于训练一个神经网络而言,有 k 个样本,每个样本只会被训练一次,所以训练一个神经网络的时间复杂度为 O(k*n2),同理,预测一个样本,时间复杂度是 O(n2)。

对于时间复杂度,因 n1 和 n3 是固定的,即输入层与输出层神经元数量恒定,故仅相关于隐藏层神经元数量, 亦即 O(n2)。又在 n1 和 n3 恒定时,仅有 n2 随输入而波动,可知算法的一系列操作可在 O(1)的空间上完成。

为了加强鲁棒性,在满足精度要求的前提下,取尽可能少的隐层节点数,即本课程设计中的 15 个节点。

三、总结:

① 首先是对隐藏层节点数目的考虑,过多或者过少都不能科学地反映出样本的规律性。如果数量太少,则不能够将训练数据的规律性概括出来。如果数量过多,也不是很好,因为可能会把一些干扰性的并不是规律的内容给记录下来,这样会使得过于准确导致某些数据还是判断失误,而且会使得训练时间变长很多。比较妥当的一个做法就是根据公式计算出一个初始的实验值。

② 至于究竟是选取每输入一个样本就进行权值调整,然后计算误差,或者是输入完所有样本数据之后再进行权值调整,根据本次实验,我得出的结论是如果样本数量多的话,输入完所有样本数据之后再进行权值调整的话能更快得进行收敛.

③ 这次课程设计在 Visual Studio 2017(community)完成了 BP 神经网络实现的编程,明白了 BP 神经网络计算过程分两步,分别是正向计算,反向计算。对于正向传播而言,计算从输入层开始到输出层结束的各层的输入输出值,对于反向传播,便是如果正向计算的输出值不满足预期,便从后往前调整权值,直至最后的数据符合预期要求。

④ 通过本次实验,对 BP 神经网络理解变得非常透彻,熟悉了 BP 神经网络的结构,对人工智能的应用有了一定的认识,也对数据结构的学习印象更深刻,提高了我学习相关知识的兴趣,期间遇到了很多困难,而且编程的实现对我而言比较繁琐,遇到了很多 BUG,但是都一一细心解决了。

⑤ 通过熟悉其数学原理,我深刻理解到了 BP 神经网络已经非常成熟。它的优点是可以解决非线性映射问题。它的网络结构也非常灵活。输入层,输出层和隐藏层的神经元数量可以根据具体的需要而设定。但是它的缺点也存在,比如说它的学习速度比较慢,就本课程设计而言,学了较大次数才能收敛,而且对于初始参数的设定而言,得不到很多的理论指导。




资源下载地址:https://download.csdn.net/download/sheziqiong/85676614
资源下载地址:https://download.csdn.net/download/sheziqiong/85676614

基于C语言BP神经网络的实现相关推荐

  1. 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(附matlab代码)

    Date: 2022.4.26 文章目录 前言 1.总体介绍 2.详细分析 2.1.训练程序 2.2.测试程序 3.测试效果图 4.测试部分matlab代码 前言 在毕业设计中实现了基于PCA和BP神 ...

  2. 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(基于AR人脸库)

    Date: 2022.5.30 文章目录 前言 1.算法原理 2.实现效果 3.测试matlab代码 前言 在大学毕业设计的时候,在毕业设计中实现了基于PCA和BP神经网络的人脸识别系统,采用matl ...

  3. 【笔记】基于边缘检测和BP神经网络的大豆杂草识别研究

    <基于边缘检测和BP神经网络的大豆杂草识别研究> 单位:吉林农业大学信息技术学院 作者:侯雨 数据获取 设备:大疆 DJI 精灵3 相机:EXMOR 1/2.3 RGB 相机 拍照:飞行高 ...

  4. matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究

    研究与开发 现代计算机 2019.04 上 文章编号:1007-1423(2019)10-0031-05 DOI:10.3969/j.issn.1007-1423.2019.10.007 基于 DPI ...

  5. 【机器学习】基于AutoEncoder的BP神经网络的tensorflow实现

    [机器学习]基于AutoEncoder的BP神经网络的tensorflow实现 一.基于AutoEncoder的BP神经网络 1.1.BP神经网络 1.1.1.BP神经网络结构 1.1.2.BP神经网 ...

  6. gwo算法matlab源代码,智能优化算法应用:基于GWO优化BP神经网络 - 附代码

    智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 文章目录智能优化算法应用:基于GWO优 ...

  7. Python基于PyTorch实现BP神经网络ANN分类模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  8. Python基于PyTorch实现BP神经网络ANN回归模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  9. 生猪价格matlab,基于时间序列的BP神经网络猪肉价格预测

    科技创新 2m6钎第20期I科技创新与应用 基于时间序列的BP神经网络猪肉价格预测 张津张瑞斌 (成都理工大学管理科学学院,四川成都610059) 摘要:猪肉价格是不稳定的,起伏变化的,猪肉价格的预测 ...

最新文章

  1. linux db2 修改日志路径,db2中更改日志文件大小及其个数
  2. 如何将本地项目发布到gitee?
  3. matlab-游标及查询
  4. 电脑安装软件出现更改计算机怎么回事,win10电脑总是自动安装软件怎么办
  5. IdentityServer4-前后端分离的授权验证(六)
  6. Leetcode刷题指南和top100题目
  7. 教学思路SQL之入门习题《学员成绩》 二、基础单表查询
  8. 一种在Java层实现的守护进程方式
  9. 电影院售票系统java_Java实现电影院订票系统代码
  10. 2月书讯 | 这本书让无数读者盼了千万遍
  11. abyy a+poj1062
  12. 起底Palantir:不愿被贴标签的硅谷神秘大数据公司
  13. dex2oat过程对系统性能的影响
  14. BUUCTF misc 二维码1解题思路
  15. StarUML 3.2.2
  16. ZCMU--5193: 韩信点兵(C语言)
  17. Lg手机在linux刷机,LG G3卡刷刷机详细图文教程
  18. Axure 8.1.0.3372亲测可用授权码
  19. ESP32-PICO-D4的串口使用
  20. python无法安装pyqt5_关于python pyqt5安装失败问题的解决方法

热门文章

  1. m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序
  2. duilib+cef+echars(一)cef版本下载
  3. android增加5G热点,运营商甘拜下风:Android 11将划分5G信号新层次
  4. Android 调用系统原生相机拍照并储存到指定位置
  5. JavaScript 点击灯泡开关
  6. 刺客引擎三端-四职业修复版
  7. 利用DRP动态调整MMCME2时钟频率
  8. 使用计算机时什么是开机键什么是关机键,电脑如何快速关机|电脑关机的快捷键是什么...
  9. 人工智能应用计算机的实例,毕业论文 人工智能及其应用
  10. iPhone 3G恢复、越狱教程