您的位置:首页 > 理论基础 > 计算机网络

c语言实现3层bp神经网络

2016-03-04 12:31 459 查看
#include <iostream>

using namespace std;

#include "math.h"

//#define e 2.718281828;

#define step 0.5

int W1[3][3] = { { 1, 2, 3 }, { 1, 0, 3 }, { 1, 2, -3 } };

int  W2[3][2] = { { 1, 0 }, { -1, 1 }, { 1, 1 } };

int X[3] = { 1, -1, 1 };

int Y[2] = { 1, 1 };

double getf(float x)

{

double e = 2.718;
return (2 / (1 + pow(e, -x))) - 1;

}

double getJ(double *p1,int *p2,int i)

{
return p1[i] * (1 - p1[i])*(p1[i] - p2[i]);



void rukou()

{

double sum[3];

double sum1[2];
for (int i = 0; i < 3; i++)
{
float nsum = 0;
for (int j = 0; j < 3; j++)
{

nsum += W1[j][i]*X[j];
}

sum[i] = getf(nsum);
printf("%f\n",sum[i]);

}
for (int i = 0; i < 2; i++)
{
double nsum = 0;

for (int j = 0; j < 3; j++)

 
nsum += W2[j][i] * sum[j];
   }
sum1[i] = getf(nsum);
printf("%f\n", sum[i]);

} //刚刚计算出了这些东西,需要进行回馈参数的修改。
//首先修改隐含层和输出之间的参数?。

//这时候需要存放di

double dik[2]; 
for (int i = 0; i < 2; i++)
{
double di = getJ(sum1,Y,i);

dik[i] = di;
for (int j = 0; j < 3; j++)
{

double cha = -step*di*sum[j];

W2[j][i] += cha;

}


for (int i = 0; i < 3; i++)
{
double yi = sum[i];

double he = 0;
for (int k = 0; k < 2; k++)
{

he += W2[i][k] * dik[k];
}

double di = yi*(1 - yi)*he;
for (int j = 0; j < 3; j++)
{

double cha=-step*X[j]*di;

W1[j][i] += cha;
 

}

} //现在输出调整后的参数

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)
{

cout << i << " and " << j << "的参数为:" << W1[i][j] << endl;
}
}

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 2; j++)
{

cout << i << " and " << j << "的参数为:" << W1[i][j] << endl;
}
}
//现在修改输入与隐含层的参数关系。

 int i;
cin >> i;

}

 

void  he()

{

rukou();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: