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

📄 tlunet.cpp

📁 BP算法 给定一个由N维向量X组成的集合
💻 CPP
字号:
#include "iostream.h"
#include "math.h"
/*    定义训练集    */
typedef double vector[4];
vector v[] = {{1,0,1,0},{0,0,1,1},{0,1,1,0},{1,1,1,1}};
double w[3][3] = {{0.2,-0.2,0},{0.1,0.3,-0.1},{0.3,-0.2,-0.1}}; //权重初始化
double f[3];   //sigmoid输出
double d[3];  //基数
double last[4] = {0.0,0.0,0.0,0.0}; //上一次的偏差
double curr[4] ; //最新的偏差
double sig(double s)
{
	double f=1/(1+exp(-s));
	return f;
}
double judge(double s)
{
	if(s>=0)return 1.0;
	else return 0.0;
}
int amod(int k)
{
	k++;
	if(k>=4)
		k%=4;
	return k;
}
void main()
{
   int i=0,j=0,t,k,index=0;
   bool flag = true;
   while(flag)
   {
	   for(t=0;t<4;t++)
	   {
		   for(i = 0;i<3;i++)
			   f[i] = 0;
		   for(i=0;i<3;i++)
		   {
			   f[0] += v[t][i]*w[0][i];             
               f[1] += v[t][i]*w[1][i];               
		   }
		   f[0] = sig(f[0]);
		   f[1] = sig(f[1]);
           f[2] =sig( f[0]*w[2][0]+f[1]*w[2][1]+w[2][2]);
           curr[t] = fabs(f[2]-v[t][3]);
           d[2] = (v[t][3]-f[2])*f[2]*(1-f[2]);              
		   for(i=0;i<2;i++)
			   d[i] = f[i]*(1-f[i])*d[2]*w[2][i];
		   for(i=0;i<2;i++)
			   for(j =0;j<3;j++)
				   w[i][j] += d[i]*v[t][j];                    
			   w[2][0] += d[2] *f[0];
               w[2][1] += d[2]*f[1];
               w[2][2] += d[2];
	   }
	   for(k=0;k<4;k++)
	   {
		   if(fabs(curr[k]-last[k])>1.0e-5) //偏差控制
           break;
	   }
	   if(k==4) 
		   flag = false;
	   else
	   {
		   for(i =0;i<4;i++)
		   last[i] = curr[i];
	   }
   }
   for(i=0;i<3;i++)
   {
	   cout<<"第"<<i<<"个TLU单元的权向量: ";
	   for(j =0;j<3;j++)
		   cout<<w[i][j]<<"\t\t";
       cout<<endl;
   }
   for(t = 0;t<4;t++)
   {
	   for(i = 0;i<3;i++)
		   f[i]=0;
	   for(i=0;i<3;i++)
	   {
		   f[0] += v[t][i]*w[0][i];
           f[1] += v[t][i]*w[1][i];
	   }
	   f[0] = judge(f[0]);f[1] = judge(f[1]);
       f[2] =judge( f[0]*w[2][0]+f[1]*w[2][1]+w[2][2]);
       cout<<"第"<<++index<<"个样本的最终输出:    ";
       cout<<f[2]<<endl;
   }
}

⌨️ 快捷键说明

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