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

📄 main.cpp

📁 经典BP算法的源程序
💻 CPP
字号:
#include "backprop.h"

#include <fstream.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

void main()
{
	int i,j,count;
	float eo, max_eo;
	float eh;

	//动态分配内存
	float **ina;
	ina=(float **)malloc(DIMENSION_NUM*sizeof(float*));
	for(i=0;i<DIMENSION_NUM;i++)
		ina[i]=(float *)malloc((M+1)*sizeof(float *));

	float in[DIMENSION_NUM][M]={0,0,0,1,1,0,1,1};
	for(i=0;i<DIMENSION_NUM;i++)
		for(j=0;j<M;j++)
			ina[i][j+1]=in[i][j];

	//动态分配内存
	float **outa;
	outa=(float **)malloc(DIMENSION_NUM*sizeof(float*));
	for(i=0;i<DIMENSION_NUM;i++)
		outa[i]=(float *)malloc((N+1)*sizeof(float *));

	float out[DIMENSION_NUM][N]={0,1,1,0};
	for(i=0;i<DIMENSION_NUM;i++)
		for(j=0;j<N;j++)
			outa[i][j+1]=out[i][j];

	BPNN *net;
	bpnn_initialize(time(NULL));
	net = bpnn_create(M,K,N);

	printf("\n");
	printf("输入层节点数为:%d\n",M);
	printf("输出层节点数为:%d\n",N);
	printf("隐含层节点数为:%d\n",K);
	printf("\n");

	count = 0;
	do
	{	
		max_eo=0;
		for(i=0; i<DIMENSION_NUM; i++)
		{
			net->input_units = ina[i];
			net->target = outa[i];
			bpnn_train(net, (float)P, (float)Q, &eo, &eh);

			if(eo>max_eo) 
				max_eo = eo;
		}
		count++;

		if(!(count%10000))
			printf("已经训练了:%d万次\n",count/10000);

		if(count>100000)
		{
			count = 0;
			net = bpnn_create(M,K,N);
			printf("\n");
			printf("创建一个新的神经网络:\n");
		}
	} while(eo > 0.001);
	
	for(i=0; i<DIMENSION_NUM; i++)
	{		
		net->input_units = ina[i];
		net->target = outa[i];
		bpnn_feedforward(net);
		printf("out[%d]:%f\n",i,net->output_units[1]);
	}
	printf("总训练次数:%d\n",count);

	for(i=0;i<DIMENSION_NUM;i++)
		free((char*)ina[i]);
	free((char*)ina);
	for(i=0;i<DIMENSION_NUM;i++)
		free((char*)outa[i]);
	free((char*)outa);

	net->input_units = NULL;
	net->target = NULL;
	bpnn_free(net);
	return ;
}

⌨️ 快捷键说明

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