资源简介
使用C++编写的多层前向NN的BP算法,各层节点数、隐藏层数均为任意整数。训练数据为3个数字的奇偶检验运算程序。程序使用VS2015编写,有cpp源代码及头文件,代码中配有注释。
代码片段和文件信息
#include “BPlayer.h“
#include
#include “BPNetwork.h“
BPlayer::BPlayer()
{
}
BPlayer::~BPlayer()
{
free(Input);
free(Output);
free(NextInput);
free(DeltaOutput);
for (int i = 0; i < OutputSize; i++)
free(Weight[i]);
free(Weight);
}
BPlayer::BPlayer(int inputSize int outputSize BPNetwork* net)
{
InputSize = inputSize;
OutputSize = outputSize;
Net = net;
Input = static_cast(malloc(inputSize*sizeof(double)));
Output = static_cast(malloc(outputSize*sizeof(double)));
NextInput = static_cast(malloc(outputSize*sizeof(double)));
DeltaOutput = static_cast(malloc(outputSize*sizeof(double)));
//Weight[j][last]为常数项,即阈值
Weight = static_cast(malloc((outputSize)*sizeof(double*)));
DeltaWeight = static_cast(malloc((outputSize)*sizeof(double*)));
for (int j = 0; j < outputSize; j++)
{
//输入项应该多一个常数项
Weight[j] = static_cast(malloc((inputSize + 1)*sizeof(double)));
DeltaWeight[j] = static_cast(malloc((inputSize + 1)*sizeof(double)));
for (int i = 0; i <= inputSize; i++)
{
Weight[j][i] = 1.0*rand() / RAND_MAX - 0.5; //产生-0.5到0.5的随机数
DeltaWeight[j][i] = 0;
}
}
}
double* BPlayer::Process()
{
for (int j = 0; j < OutputSize; j++)
{
Output[j] = Weight[j][InputSize];
for (int i = 0; i < InputSize; i++)
{
Output[j] += Input[i] * Weight[j][i];
}
}
return Output;
}
double* BPlayer::ActiveOutput()
{
for (int j = 0; j < OutputSize; j++)
{
NextInput[j] = 1.0 / (1 + exp(-Output[j]));
}
return NextInput;
}
void BPlayer::SetInput(double * input)
{
for (int i = 0; i < InputSize; i++)
{
Input[i] = input[i];
}
}
void BPlayer::UpdateWeight()
{
double lastDelta;
double delta;
for (int j = 0; j < OutputSize; j++)
{
for (int i = 0; i < InputSize; i++)
{
lastDelta = DeltaWeight[j][i];
delta = DeltaOutput[j] * Input[i];
DeltaWeight[j][i] = Net->Alpha *delta + Net->Eta* lastDelta;
Weight[j][i] -= DeltaWeight[j][i];
}
DeltaWeight[j][InputSize] = Net->Alpha *DeltaOutput[j] + Net->Alpha* DeltaWeight[j][InputSize];
Weight[j][InputSize] -= DeltaWeight[j][InputSize];
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1050 2015-11-09 00:42 BPla
文件 3488 2015-11-09 00:46 BPNetwork.cpp
文件 955 2015-11-09 00:46 BPNetwork.h
文件 80 2015-11-08 22:16 data.txt
文件 868 2015-11-09 00:49 main.cpp
文件 1131 2015-11-09 00:01 SampleLoader.cpp
文件 233 2015-11-08 22:16 SampleLoader.h
文件 7743 2015-11-08 22:16 YML.BPN.vcxproj
文件 2274 2015-11-09 00:42 BPla
----------- --------- ---------- ----- ----
17822 9
- 上一篇:Linux环境下的文件安全传输(C/C++)
- 下一篇:自己用C++实现的RC4算法
相关资源
- 自己用C++实现的RC4算法
- Linux环境下的文件安全传输(C/C++)
- SHA-1算法实现源代码
- 本例程采用VC++ 实现JPG格式图片的打开
- c++高仿QQ截图
- 银行家算法模拟实现C++版
- 道格拉斯压缩算法C++实现
- Visual C++开发GIS系统第2版书中代码
- 航空订票管理系统 机场订票管理系统
- moravec算子c++代码
- FCFS和SJF调度算法C++
- FTP服务器C++代码实现
- C++ jpeg图像编码与解码
- 进程调度的设计与实现图形界面c++
- 家谱管理系统C++作业
- VC++异步通信的socket类
- 深度优先搜索算法C++实现
- 数据库管理系统原型开发C/C++
- BP算法程序实现包括matlab、C语言、C
- C++图书管理系统 c++
- C和C++ Windows代码移植到Linux
- 固高GT编程手册的Vc++单轴运动程序
- Kinect程序开发帮助文档C++
- MFC课设高校教师信息管理系统论文
- 指纹识别C++
- The C++ Standard Library(简体中文)
- c++ GridCtrol表格类 控件
- AES加密解密系统 VC++6.0 实现
- VC++access与excel数据的导入导出
- C/C++程序 多元多项式的相乘
评论
共有 条评论