单隐层BP神经网络C++实现

本文介绍了作者使用C++实现单隐层BP神经网络的过程,包括类设计、激活函数、隐藏层和输出层的计算、网络训练以及测试主函数。借助Eigen库进行矩阵运算,通过训练调整连接权值和阈值,以减小输出均方误差。在测试中,随着训练次数的增加和隐层节点数的增加,预测结果的误差逐渐减小。
摘要由CSDN通过智能技术生成

    这几天抽时间学习了一下很久之前就想学习的BP神经网络。通过阅读西瓜书的神经网络部分的原理和参考了网上几篇博客,我自己用C++编写、实现了一个单隐层BP神经网络。

    简单画了个示意图,好理解下面给出的公式:(注意:图中省略了其他的节点之间的连线)

    西瓜书上的BP神经网络训练流程:

训练流程:

输入:训练集D={(xkyk)},学习率η

过程:

在(0,1)范围内随机初始化网络中的所有连接权和阈值

repeat

      for all (xkyk)ⅭD do

           计算当前样本的输出yk

           计算输出层神经元的梯度项gj

                   计算隐藏层神经元梯度项ek

           更新连接权值wh,j,vi,j与阈值θjϒh

      end for

until 达到停止条件

输出:连接权值与阈值确定的单隐层前馈神经网络

    在这里,我就不解释BP神经网络了,西瓜书上写得十分详细和明白,我直接上程序。

    关于矩阵处理,C++不如python来得快和方便,但是只要是算法都是能够运用任何一种语言描述出来的。这里,为了方便矩阵的运算,我加入了Eigen库。Eigen库不用安装,直接下载好然后再配置一下就好。关于Eigen配置和使用可以参照博客:https://blog.csdn.net/fengbingchun/article/details/47378515

    不说了,接下来上代码。

    1、单隐层BP神经网络类设计

    代码中的注释已经很详细了,我就不解释了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值