用c++实现bp神经网络

本文介绍了如何使用C++编写一个通用的BP神经网络,包括设置激活函数、输入输出规模和隐层神经元数量。首先讲解了安装Eigen库的步骤,然后简述了Eigen的基本操作,并提供了bp.h、bp.cpp及main.cpp的代码实现。
摘要由CSDN通过智能技术生成

前段时间用了js写了bp神经网络,但js怎么比得上我大c++呢。于是我右用c++写了一个更加通用的神经网络,带设置信息的那种。可以规定激活函数、输入输出规模,隐层神经元数量等。

在这之前先要规定一些概念,在本代码中使用了eigen进行矩阵运算。

1.安装Eigen
    a.解压文件并重命名为eigen(去官网下载即可)
    b.打开项目,右键属性,添加相应的目录位置
这里写图片描述

这样遍安装成功了。

2.Eigen的基本操作
这里写图片描述

最后上代码(推导就不再推导了,看西瓜书吧)
bp.h文件

#ifndef bp_h
#define bp_h
#include<Eigen\Dense>
using namespace Eigen;
// 网络信息
struct Net
{
    //学习率
    double engama;

    //输入层神经元个数
    int input_length;

    //输出层神经元个数
    int output_length;

    //隐层神经元个数
    int hide_length;

    //隐层阈值
    MatrixXd hide_threshold;

    //输出层阈值
    MatrixXd output_threshold;

    //输入层与隐层的权值
    //行数为隐层层神经元个数
    //列数为输入层神经元个数
    MatrixXd v;

    //隐层与输出层的权值
    //行数为输出神经元个数
    //列数为隐层神经元个数
    MatrixXd w;

    //激活函数
    //当d是true时,函数返回导数结果
    double ( *Sigmoid )( double x, bool d );
};

//sigmoid函数
double Sigmoid(double x, bool d);

//sigmoid函数
//x是一个矩阵,将矩阵内所有元素sigmoid
MatrixXd Sigmoid(MatrixXd x, bool d);


//初始化net
Net initialNet(double engama, int input_length, int output_length, int hide_length);

class Bp
{
public:

    //构造函数,需要传入一个Net类型结构体
    Bp( Net net );

    //getnet
    Net getNet();

    //update net
    
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值