• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: C++  

资源简介

使用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  BPlayer.h

     文件       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  BPlayer.cpp

----------- ---------  ---------- -----  ----

                17822                    9


评论

共有 条评论