BP神经网络C++实现(任意Layer、Node)

1. 本项目的优点

  • 纯C++实现,不依赖三方库,仅用到C++标准库
  • 项目结构简单,BPnet的实现仅用到3个头文件和3个源文件

2. 技术背景

  • BP神经网络是什么?
    • 这个问题相信大家在找BP神经网络代码实现之前已经看了不少其公式推导和实现原理,这里不再赘述。
    • 在代码实现上秩序记住BP:Back Propagation,即反向传播即可。
  • 为什么要用C++实现?
    • 众所周知,利用Tensorflow、Pytorch等一系列框架可以很方便地搭建起自己的神经网络,像BP神经网络这种简单结构秩序几行代码即可实现。
    • 但最近的项目上遇到一个简单的拟合任务,用上面的经典框架可以实现但比较笨重(安装框架等),而且有的机器上没有python运行环境。于是开始寻找用C++来实现BP神经网络的代码。
    • 该项目基于函数计算,只用到了C++标准库,很方便移植,而且完美契合我的需求(简单、不依赖三方库)。

3. BP神经网络实现

3.1 参考博客        

3.2 C++实现

3.2.1 项目文件说明

  • /bpnet文件夹为BP网络结构实现和声明
    • BPLink、BPNet、NPNode为BPNet网络的实现和声明
    • Pattern为BPNet加载数据的一个工具类,本项目实现中使用csv_tool来代替,所以实际并未用到Pattern
    • csv_tool.cpp、csv_tool.h为c++程序读取、写入csv文件的工具实现和声明
  • train.cpp为训练程序,训练结束会把模型保存为model.nn或自定义其他名称和格式
  • test.cpp为测试程序,读取test.csv值并输出预测值至result.csv
  • csv文件
    • train.csv为模型训练数据,以3输入1输出为例,0列为输出值,1、2,3列为输出值
    • test_data.csv为模型输入值
    • result.csv为模型预测值

3.2.2 BPnet使用

  • 编译程序
g++ -o train train.cpp ./bpnet/*.cpp
g++ -o test test.cpp ./bpnet/*.cpp

4. 实例测试

  • 以下面的输入输出为例进行训练
输出输入1输入2输入3
0.3001
0.6010
0.9100
  • train_data.csv数据如下

  •  搭建BP神经网络并编译训练,BP神经网络结构如下,共6层。各参数的含义请参考2.1节中的第二篇博客

  •  执行./train后,大约1s即可收敛,速度很快。最后一步时误差降至2.40877e-05

  •  执行./test进行测试,测试数据和输出结果分别如下,可见效果非常好

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值