本文实例为大家分享了C++实现简单BP神经网络的具体代码,供大家参考,具体内容如下
实现了一个简单的BP神经网络
使用EasyX图形化显示训练过程和训练结果
使用了25个样本,一共训练了1万次。
该神经网络有两个输入,一个输出端
下图是训练效果,data是训练的输入数据,temp代表所在层的输出,target是训练目标,右边的大图是BP神经网络的测试结果。
以下是详细的代码实现,主要还是基本的矩阵运算。
#include#include #include #include #include #define uint unsigned short #define real double #define threshold (real)(rand() % 99998 + 1) / 100000 // 神经网络的层 class layer{ private: char name[20]; uint row, col; uint x, y; real **data; real *bias; public: layer(){ strcpy_s(name, "temp"); row = 1; col = 3; x = y = 0; data = new real*[row]; bias = new real[row]; for (uint i = 0; i row = row; this->col = col; this->x = 0; this->y = 0; this->data = new real*[row]; this->bias = new real[row]; for (uint i = 0; i
10e-6){ result = false; break; } } } return result; } void randomize(){ for (uint i = 0; i
|
#include "network.h" void main(){ FILE file; FILE *fp = &file; // 读取状态 fopen_s(&fp, "Text.txt", "r"); network net(fp); fclose(fp); initgraph(600, 320); net.train(); // 保存状态 fopen_s(&fp, "Text.txt", "w"); net.save(fp); fclose(fp); getchar(); closegraph(); }
上面这段代码是在2016年初实现的,非常简陋,且不利于扩展。时隔三年,我再次回顾了反向传播算法,重构了上面的代码。
最近,参考【深度学习】一书对反向传播算法的描述,我用C++再次实现了基于反向传播算法的神经网络框架:Github: Neural-Network。该框架支持张量运算,如卷积,池化和上采样运算。除了能实现传统的stacked网络模型,还实现了基于计算图的自动求导算法,目前还有些bug。预计支持搭建卷积神经网络,并实现【深度学习】一书介绍的一些基于梯度的优化算法。
欢迎感兴趣的同学在此提出宝贵建议。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。