2 Star 0 Fork 0

GoodMorning/bpneuralnetwork

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
bpNeuralNetwork2.h 3.84 KB
一键复制 编辑 原始数据 按行查看 历史
GoodMorning 提交于 2018-12-29 17:16 . add some description
/**
******************************************************************************
* @file bpNeuralNetwork2.h
* @author 古么宁
* @brief 两层隐含层 bp 神经网络
* 使用方法:
* 1. BPNN_CREATE(NAME,INN,OUTN,LY1NN,LY2NN) ;创建一个神经网络
* 2. struct bpnntrain bptrcfg; 定义训练参数
* 3. bpnn_init(NAME);对神经网络的内存进行初始化
* 4. bpnn_train(&bpnn,&traincfg,sample_in,sample_out,size);用样点训练神经网络
* 5. bpnn_calulate() ;用此函数进行计算预测
* <注:此文件用到变长数组,要C99以上或GNUC版本编译器支持>
******************************************************************************
*
* COPYRIGHT(c) 2018 GoodMorning
*
******************************************************************************
*/
/* Includes ---------------------------------------------------*/
#ifndef __BPNeuralNetwork2_H__
#define __BPNeuralNetwork2_H__
typedef struct bpnntrain
{
uint32_t maxt ; //最多训练次数
double limit ; //训练结束误差界限
double ly1WiA ;
double ly1WiB ;
double ly1WoA ;
double ly1WoB ;
double ly2WoA ;
double ly2WoB ;
}
bpnntr_t;
typedef struct bp_neuralnetwork
{
uint32_t netin ; //网络输入端个数
uint32_t netout; //网络输出端个数
uint32_t ly1nn ; //第一隐含层神经元个数
uint32_t ly2nn ; //第二隐含层神经元个数
// 以下为根据输入样点所进行的数据提取
void * min_in; // min_in[netin] ,各维度输入的最小值,如 [0 -6],即第一个输入最小为0,第二个输入最小为 -6
void * max_in; // max_in[netin] ,各维度输入的最大值,如 [0 -6],即第一个输入最大为0,第二个输入最大为 -6
void * min_out;// min_out[netout] ,各维度输出的最小值,如 [0 -6],即第一个输出最小为0,第二个输出最大为 -6
void * max_out;// max_out[netout] ,各维度输出的最大值,如 [0 -6],即第一个输出最大为0,第二个输出最大为 -6
// 以下为神经网络的基本参数
void * ly1Wi ; //ly1Wi[netin][ly1nn],输入层到第一隐含层的输入权重
void * ly1Wo ; //ly1Wo[ly1nn][ly2nn],第一隐含层到第二隐含层的输出权重
void * ly2Wo ; //ly2Wo[ly2nn][netout],第二隐含层到输出层的输出权重
}
bpnn_t;
/*
* @brief BPNN_CREATE
* 创建一个神经网络
* @param NAME : 此神经网络的名称
* @param INN : 此神经网络输入端个数
* @param OUTN : 此神经网络输出端个数
* @param LY1NN: 此神经网络第一隐含层的神经元个数
* @param LY2NN: 此神经网络第二隐含层的神经元个数
*/
#define BPNN_CREATE(NAME,INN,OUTN,LY1NN,LY2NN)\
double NAME##buf[(INN)*(2+(LY1NN)) + (OUTN)*(2+(LY2NN)) + (LY2NN)*(LY1NN)] = {0};\
bpnn_t NAME = {.netin=(INN), .netout=(OUTN), .ly1nn=(LY1NN), .ly2nn=(LY2NN), .min_in=NAME##buf}
/*
* @brief BPNN_MALLOC
* 创建一个神经网络
* @param NAME : 此神经网络的名称
* @param INN : 此神经网络输入端个数
* @param OUTN : 此神经网络输出端个数
* @param LY1NN: 此神经网络第一隐含层的神经元个数
* @param LY2NN: 此神经网络第二隐含层的神经元个数
*/
#define BPNN_MALLOC(NAME,INN,OUTN,LY1NN,LY2NN)\
bpnn_t NAME = {.netin = (INN), .netout = (OUTN), .ly1nn = (LY1NN), .ly2nn = (LY2NN),\
.min_in = malloc(sizeof(double)* ((INN)*(2+(LY1NN)) + (OUTN)*(2+(LY2NN)) + (LY2NN)*(LY1NN)))}
#define BPNN_FREE(NAME) free((NAME)->min_in)
/*
* @brief bpnn_train
* 用样点训练一个 bp 神经网络
*
* @param traincfg : 样点的训练信息,初始化学习速率和训练次数
*
* @param samplein : 样点的输入,形如 samplein[size][netin];
* size 表示第几个样点,一个样点共有 netin 个输入
*
* @param sampleout : 样点的输出,形如 samplein[size][netout];
* size 表示第几个样点,一个样点共有 netout 个输出
*
* @param size : size 样点总个数
*/
void bpnn_train(bpnn_t * bpnn , bpnntr_t * traincfg , void * samplein, void * sampleout, uint32_t size);
/*
* @brief bpnn_calculate; bp 神经网络输入得到输出
*
* @param in : in[netin] ,网络的输入向量
* @param out : out[netout] ,网络的输出向量
*/
void bpnn_calculate(bpnn_t * bpnn , double * in , double * out);
void bpnn_init(bpnn_t * bpnn);
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/somebug/bpneuralnetwork.git
[email protected]:somebug/bpneuralnetwork.git
somebug
bpneuralnetwork
bpneuralnetwork
master

搜索帮助