⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ann1.cpp

📁 一个基于BP神经网络算法解决奇偶问题的源代码
💻 CPP
字号:
#include"iostream.h"
#include "math.h"
#include <stdlib.h>
#include  <time.h>
#include <fstream.h>

#define M 3
#define node 4
void initw(float weight[M][node][node])
{
	int i,j;
	for(i=0;i<4;i++)
		for(j=0;j<3;j++)
			weight[1][i][j]=(float)(rand()%200-100)/100;
		for(i=0;i<4;i++)
			weight[2][i][0]=(float)(rand()%200-100)/100;
}

float sum(float weight[node][node],float y[node],int nodebh,int nodenum)
{
	float result=0;
	int i=0;
	for(i=0;i<nodenum;i++)
		result+=weight[i][nodebh]*y[i];
	return result;
	
}

float F(float var)
{
	float result=0;
	result=(float)(1+exp(0-var));
	result=1/result;
	return result;
	
}

float Fd(float var)
{
	return F(var)*(1-F(var));
}

void main()
{	
	time_t t;
	ofstream fout("E:\\output.txt");
    srand((unsigned) time(&t));
	float opvar=0.5,outerr=0;
	float operr=0,modf=0,miderr[4]={0},prrorerr1[4][3]={0},prrorerr2[4]={0};
	float weight[M][node][node]={0},midsum[4]={0},midre[4]={0},lastin=0,result=0;
	float X[8][3]={0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1},T[8]={0,1,1,0,1,0,0,1},input[4]={0};
	int i,j,k,hh,pp,qq,resultint=-1;
	initw(weight);
	for(qq=0;qq<1;qq++)
	{
		resultint=-1;
		for(pp=0;pp<1000;pp++)
		{
			i=rand()%8;
			input[0]=X[i][0];
			input[1]=X[i][1];
			input[2]=X[i][2];
			input[3]=1;
			for(hh=0;hh<100;hh++)
			{
				
				
				for(j=0;j<3;j++)
				{
					midsum[j]=sum(weight[1],input,j,4);
					midre[j]=F(midsum[j]);
				}
				midre[3]=1;
				
				lastin=sum(weight[2],midre,0,4);
				result=F(lastin);
				operr=Fd(lastin)*(T[i]-result);
				
				
				for(j=0;j<3;j++)
					miderr[j]=Fd(midsum[j])*weight[2][j][0]*operr;
				for(j=0;j<4;j++)
				{
					modf=opvar*operr*midre[j]+0.9*prrorerr2[j];	
					weight[2][j][0]=weight[2][j][0]+modf;
					prrorerr2[j]=modf;
				}
				for(j=0;j<3;j++)
					for(k=0;k<4;k++)
					{
						modf=opvar*miderr[j]*input[k]+prrorerr1[k][j]*0.9;
						weight[1][k][j]=weight[1][k][j]+modf;
						prrorerr1[k][j]=modf;
					}
					if(pp==3)
					{
						outerr=(T[i]-result)*(T[i]-result)/2;
						fout<<outerr<<endl;
					}
			}
			
		}
		input[0]=X[i][0]+(float)(rand()%100-50)/1000;
		input[1]=X[i][1]+(float)(rand()%100-50)/1000;
		input[2]=X[i][2]+(float)(rand()%100-50)/1000;
		input[3]=1;
		for(j=0;j<4;j++)
		{
			midsum[j]=sum(weight[1],input,j,4);
			midre[j]=F(midsum[j]);
		}
		lastin=sum(weight[2],midre,0,4);
		result=F(lastin);
		if(result>0.9)
			resultint=1;
		if(result<0.1)
			resultint=0;
		cout<<result<<"    "<<resultint<<endl;	
		cout<<input[0]<<"  "<<input[1]<<"      "<<input[2]<<endl;
		cout<<"*****************************************"<<endl;
	}
	
	
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -