赞
踩
前段时间用了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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。