BP神经网络C语言实现

山人

BP神经网络应用广泛,大概是今年的五月份左右,我需要做一个多元函数的拟合,所以写了这个BP神经网络。为什么要使用C语言来写呢?因为我的程序需要在单片机上跑,所以不得不使用C语言。

这一篇博客不会讲解BP神经网络的基本原理,反向传播公式,因为关于这些的资料网上已经很多了(虽然大多数都有着不小的BUG,但足以入门学习)。我会着重讲解我写的BP神经网络的每个函数的具体作用,以及该如何使用,争取让有需要的人能通过这篇博客学会使用我写的BP神经网络。

C语言工程链接:https://download.csdn.net/download/qq_39545674/10884423

也可以关注我的微信公众号“ 山人彤 ”,回复“ BP神经网络C语言 ”,即可获取代码

如果想知道BP神经网络的理论推导,可以参考下面的链接,这篇博客写的很好:

BP神经网络原理推导:https://blog.csdn.net/qq_39545674/article/details/86375170

如果你想在单片机或者arm之类的硬件上(当然,电脑也可以)部署bp神经网络,做一些函数拟合或者预测之类的,我的工程可以直接帮你解决。

1 BP神经网络具体函数

1.1 main.c

这是BP神经网络训练的主函数,在这里设置网络的主要参数。

·训练的样本x、y,(x表示输入,一行表示一个输入变量,y表示输出,一行表示一个输出变量,x、y的行列数ROW_X、COL_X、ROW_Y、COL_Y定义在BPNetwork.h里面,需要根据你的训练样本自己修改)

·隐含层的层数LAYER(这是一个宏,在BPNetwork.h里面定义的)

·激励函数选择:mode为1表示选择正切双曲余弦函数作为激励函数,为0表示选择sig函数作为激励函数,一般选则前者,性能更好。

·nodes是隐含层神经元个数设置数组,第一个元素表示第一层隐含层神经元个数,依此类推。

1.2 BPNetwork.c BPNetwork.h

这是BP神经网络的主体部分,包括网络的正向过程和反向传播过程。由于这部分不会涉及到参数的设置,所以就不列举变量以及函数了,主要介绍算法过程。

1.2.1 数据预处理

首先第一步是将训练样本进行归一化的操作,这样可以增加收敛速度。执行这个功能的是minmax函数。

1.2.2 建立网络节点

第二步是建立网络节点。执行这个功能的是netSetup。

1.2.3 初始化参数

执行函数是netInit。

1.2.4 设置求解的迭代次数

Maxepoch表示训练的代数,可以自己根据需求设置。

1.2.5 开始求解

接着就是开始求解了,这是使用了传统的BP优化方法,加入了动量项以及学习速率的自适应。具体函数是netSolve。

1.2.6 恢复到原始空间

由于之前将数据归一化了,所以现在需要还原到原始空间。执行函数是recoverOutput。

1.2.6 保存结果

在求解结束后,将得到的参数以及隐含层信息保存到一个txt文件里面(便于在单片机上建立函数),执行函数是OutPut。

1.2.7 释放内存

由于在训练的时候使用了动态内存,所以必须释放,否则内存泄漏,执行函数是freeNet。

1.3 BPSim.c BPSim.h

网络训练好之后,就是该如何应用的问题了。只需要把BPSim.c 和BPSim.h拷贝到单片机工程里面,把上一步保存的txt文件里面的参数拷贝给data即可。

初始化步骤如下:

  • 拷贝参数给data。注意,txt里面的参数是列向量,需要转成行向量再拷贝。
  • 执行simInit函数。注意,如果和我一样需要在单片机或其他嵌入式平台上使用,需要稍稍修改一下这个函数,去掉readData函数
  • 执行sim函数。这个就是仿真函数了。

1.4 其他

rand.c rand.h 是我写的一个随机数生成函数,用于参数初始化,也可以使用自带的。

我所使用的环境是win10,VS2017,(VS2013也跑过)

如果有什么问题,欢迎评论,可以加入QQ群:1106399639 交流

关注我的微信公众号“ 山人彤 

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

  1. BP神经网络-- C语言实现

    在上一篇文章中,介绍了BP神经网络的基本模型.模型中的一些术语并对模型进行了数学上的分析,对它的原理有了初步的认识.那么如何用程序语言来具体的实现它,将是我们下一步需要讨论的问题.本文选取的是C语言来 ...

  2. 三层BP神经网络公式推导及C语言实现

    公式推导   三层BP神经网络如上图所示.其中, x i x_i xi​表示第 i i i个输入层节点的输入值,也是其输出值, z j z_j zj​表示第 j j j个隐藏层节点的输出值, y k ...

  3. 详解 BP 神经网络基本原理及 C 语言实现

    BP(back propagation)即反向传播,是一种按照误差反向传播来训练神经网络的一种方法,BP神经网络应用极为广泛. BP 神经网络主要可以解决以下两种问题: 1.分类问题:用给定的输入向量 ...

  4. R语言经典模型BP神经网络

    你好,我是个会计学渣,我的毕业论文里有关于bp神经网络的内容,但是我不会 大概就是运用经典模型BP神经网络去模拟某公司会计盈余质量是好还是不好. 1.黄标为负相关 2.表格上半输入部分为财务数据,中间 ...

  5. 人工智能之BP人工神经网络C语言实现内附实现代码

    原文:https://www.shanyemangfu.com/bp-c.html 人工智能现在还是十分火热.说到人工智能,那就必须提到AlphaGo的事情.这样就可以引出神经网络了.BP神经网络是最 ...

  6. R语言 BP神经网络

    神经网络是由具有适应性的简单单元组成的广泛进行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做的交互反应. 人工神经网络对一组输入信号和一组输出信号之间的关系建模,使用的模型来源于人类大脑对 ...

  7. 基于C语言BP神经网络的实现

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

  8. C语言实现的BP神经网络算法(1)-BPANN原理

    5.4 BP神经网络的基本原理 BP(BackPropagation)网络是1986年由Rinehart和McClelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用 ...

  9. bp神经网络分类器c语言,基于BP神经网络的隐写分析分类器设计

    [ 摘 要 ] 设计并实现了基于BP神经网络的隐写分析分类器.首先对图像库中的图像进行格式变换,并使用扩展修改方向和钻石编码两种隐写方法进行不同嵌入率的隐写嵌入,然后计算载体图像和载密图像中平面域.D ...

最新文章

  1. LeetCode简单题之作为子字符串出现在单词中的字符串数目
  2. .net2.0网站多语言
  3. linux 终端什么意思,请问我的终端显示的是什么意思
  4. Java线程的两种实现方式
  5. 麦克风阵列降噪_黄鹂智声降噪耳机E100u,与喧嚣说再见
  6. c语言程序计算p q真值表,C语言程序设计第2章数据类型﹒运算符和表达式.ppt
  7. 2021长郡浏阳中学高考成绩查询,2021长沙市高中排名一览表
  8. Java 洛谷 P1055 ISBN号码
  9. XGBoost-工程实现与优缺点(中)
  10. [css] 判断第一行和第二行的颜色分别是什么?并解释为什么?
  11. 集成学习(一)——随机森林以及GBDT
  12. 前端对接海康威视监控
  13. 批处理脚本Bat打开URL
  14. Unity中设置对象匀速移动
  15. 总结了一些很实用值得收藏的站点
  16. 51蓝牙红外循迹避障小车+代码
  17. 官方最新linux版idea工具ideaIU-2020.1.1.tar.gz
  18. vnc远程控制软件配置,vnc远程控制软件怎么配置,教程详解
  19. 【LG-P1251】餐巾计划问题
  20. 【Excle数据透视表】如何让字段标题不显示“求和项”

热门文章

  1. java 一笔一划 写汉字_基于Web的汉字一笔一划书写方法
  2. 【python数据分析实战】城市餐饮店铺选址问题(2)—— 确定餐馆的具体位置
  3. 单边指数信号的傅立叶matlab,实验四连续信号的傅立叶变换
  4. linux中安装openoffice,及解决转pdf时中文乱码或者中文不显示问题【离线】
  5. php开发人工智能,php可以开发人工智能吗
  6. opencv inrange函数
  7. ffmpeg使用记录--解决了压制的视频在安卓不播放的问题
  8. 蓝光原版与蓝光Remux格式到底有什么区别?
  9. 图神经网络-图与图学习笔记-1
  10. 如果你身边有程序员 今天对他好一点