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

📄 unit1.cpp

📁 该软件通过BP神经网络学习机制
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int SampleNo=0; //计数所输入的样本个数

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
//权重初始化
  int a,b;
  for (a=0;a<InputLayer;a++)
    for (b=0;b<MiddleLayer;b++)
           wi[a][b]=float (rand()%10000-5000)/5000;
  for (a=0;a<MiddleLayer;a++)
    for (b=0;b<OutputLayer;b++)
           wo[a][b]=float (rand()%10000-5000)/5000;
  for (int i=0;i<8;i++) //初始化输出结点的存放空间
  {
    for (int j=0;j<OutputLayer;j++)
    {
    correctout[i][j]=0;;
    }
    correctout[i][i]=1;

	}

 Form1->Edit2->Enabled=false;
 Form1->Edit1->Clear();
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)
{
//设置样本对
 if(Form1->Edit1->Text=="")
 {
 MessageDlg("请先在输入框内输入正确的样本!",mtInformation,
                    TMsgDlgButtons()<<mbOK,0);
 return;
 }

  for(int i=0;i<InputLayer;i++)
    {
    Dot[SampleNo][i]=0;
    }
  if(Form1->CheckBox1->Checked){Dot[SampleNo][0]=1;}
  if(Form1->CheckBox2->Checked){Dot[SampleNo][1]=1;}
  if(Form1->CheckBox3->Checked){Dot[SampleNo][2]=1;}
  if(Form1->CheckBox4->Checked){Dot[SampleNo][3]=1;}
  if(Form1->CheckBox5->Checked){Dot[SampleNo][4]=1;}
  if(Form1->CheckBox6->Checked){Dot[SampleNo][5]=1;}
  if(Form1->CheckBox7->Checked){Dot[SampleNo][6]=1;}
  if(Form1->CheckBox8->Checked){Dot[SampleNo][7]=1;}
  if(Form1->CheckBox9->Checked){Dot[SampleNo][8]=1;}
  if(Form1->CheckBox10->Checked){Dot[SampleNo][9]=1;}
  if(Form1->CheckBox11->Checked){Dot[SampleNo][10]=1;}
  if(Form1->CheckBox12->Checked){Dot[SampleNo][11]=1;}
  if(Form1->CheckBox13->Checked){Dot[SampleNo][12]=1;}
  if(Form1->CheckBox14->Checked){Dot[SampleNo][13]=1;}
  if(Form1->CheckBox15->Checked){Dot[SampleNo][14]=1;}
  if(Form1->CheckBox16->Checked){Dot[SampleNo][15]=1;}
  if(Form1->CheckBox17->Checked){Dot[SampleNo][16]=1;}
  if(Form1->CheckBox18->Checked){Dot[SampleNo][17]=1;}
  if(Form1->CheckBox19->Checked){Dot[SampleNo][18]=1;}
  if(Form1->CheckBox20->Checked){Dot[SampleNo][19]=1;}
  if(Form1->CheckBox21->Checked){Dot[SampleNo][20]=1;}
  if(Form1->CheckBox22->Checked){Dot[SampleNo][21]=1;}
  if(Form1->CheckBox23->Checked){Dot[SampleNo][22]=1;}
  if(Form1->CheckBox24->Checked){Dot[SampleNo][23]=1;}
  if(Form1->CheckBox25->Checked){Dot[SampleNo][24]=1;}
  if(Form1->CheckBox26->Checked){Dot[SampleNo][25]=1;}
  if(Form1->CheckBox27->Checked){Dot[SampleNo][26]=1;}
  if(Form1->CheckBox28->Checked){Dot[SampleNo][27]=1;}
  if(Form1->CheckBox29->Checked){Dot[SampleNo][28]=1;}
  if(Form1->CheckBox30->Checked){Dot[SampleNo][29]=1;}
  if(Form1->CheckBox31->Checked){Dot[SampleNo][30]=1;}
  if(Form1->CheckBox32->Checked){Dot[SampleNo][31]=1;}
  if(Form1->CheckBox33->Checked){Dot[SampleNo][32]=1;}
  if(Form1->CheckBox34->Checked){Dot[SampleNo][33]=1;}
  if(Form1->CheckBox35->Checked){Dot[SampleNo][34]=1;}
  if(Form1->CheckBox36->Checked){Dot[SampleNo][35]=1;}
  if(Form1->CheckBox37->Checked){Dot[SampleNo][36]=1;}
  if(Form1->CheckBox38->Checked){Dot[SampleNo][37]=1;}
  if(Form1->CheckBox39->Checked){Dot[SampleNo][38]=1;}
  if(Form1->CheckBox40->Checked){Dot[SampleNo][39]=1;}
  if(Form1->CheckBox41->Checked){Dot[SampleNo][40]=1;}
  if(Form1->CheckBox42->Checked){Dot[SampleNo][41]=1;}
  if(Form1->CheckBox43->Checked){Dot[SampleNo][42]=1;}
  if(Form1->CheckBox44->Checked){Dot[SampleNo][43]=1;}
  if(Form1->CheckBox45->Checked){Dot[SampleNo][44]=1;}
  if(Form1->CheckBox46->Checked){Dot[SampleNo][45]=1;}
  if(Form1->CheckBox47->Checked){Dot[SampleNo][46]=1;}
  if(Form1->CheckBox48->Checked){Dot[SampleNo][47]=1;}
  if(Form1->CheckBox49->Checked){Dot[SampleNo][48]=1;}
  if(Form1->CheckBox50->Checked){Dot[SampleNo][49]=1;}
  if(Form1->CheckBox51->Checked){Dot[SampleNo][50]=1;}
  if(Form1->CheckBox52->Checked){Dot[SampleNo][51]=1;}
  if(Form1->CheckBox53->Checked){Dot[SampleNo][52]=1;}
  if(Form1->CheckBox54->Checked){Dot[SampleNo][53]=1;}
  if(Form1->CheckBox55->Checked){Dot[SampleNo][54]=1;}
  if(Form1->CheckBox56->Checked){Dot[SampleNo][55]=1;}
  if(Form1->CheckBox57->Checked){Dot[SampleNo][56]=1;}
  if(Form1->CheckBox58->Checked){Dot[SampleNo][57]=1;}
  if(Form1->CheckBox59->Checked){Dot[SampleNo][58]=1;}
  if(Form1->CheckBox60->Checked){Dot[SampleNo][59]=1;}
  if(Form1->CheckBox61->Checked){Dot[SampleNo][60]=1;}
  if(Form1->CheckBox62->Checked){Dot[SampleNo][61]=1;}
  if(Form1->CheckBox63->Checked){Dot[SampleNo][62]=1;}
  if(Form1->CheckBox64->Checked){Dot[SampleNo][63]=1;}
  trueout[SampleNo]=Edit1->Text;
   SampleNo++;
  if (SampleNo>SampleMax)
      SampleNo = SampleNo%SampleMax;
  Form1->Button4->Caption=IntToStr(SampleNo);
}
 //---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{

 //学习过程
        float alfa,delta_b[MiddleLayer],delta_a[InputLayer];
        int p;//第P个输入样本
	int i,j,testnum;
	float temp,temp2;
	bool  needajust;

	float yita=0.3;
        float t=0.7;
        float thita=0.1;//两个参数
	p=0;//第P个输入样本
	needajust=true;
	testnum=0;
        float ep=0;
	while (needajust)
	{
		testnum++;
		if (testnum>100000)
		{
			MessageDlg("不收敛",mtInformation,
                                 TMsgDlgButtons()<<mbOK,0);
			return;
		}
		needajust=false;
		for(p=0;p<SampleNo;p++)
		{

			while (true)
			{
				for (i=0;i<MiddleLayer;i++)
					secondout[i]=0;
				for (j=0;j<OutputLayer;j++)
					thirdout[j]=0;
				ep=0;
				temp=0;//初始化数据

			

				for (i=0;i<MiddleLayer;i++) //获取隐层的输出
				{
					for (j=0;j<InputLayer;j++)
						secondout[i]=secondout[i] + Dot[p][j] * wi[j][i];
				   secondout[i]=1/(1+exp(-(secondout[i]-thita)/t));
				}

		//输出层的输出
			  for (i=0;i<OutputLayer;i++)
				{
					for (j=0;j<MiddleLayer;j++)
						thirdout[i]=thirdout[i]+ secondout[j] * wo[j][i];
				    thirdout[i]=1/(1+exp(-(thirdout[i]-thita)/t));
				}

		//误差
				for(i=0;i<OutputLayer;i++)
					ep=ep+pow((correctout[p][i]-thirdout[i]),2);
				ep=ep/2;

	
				if (ep>0.001) 	//输出层权重的调节
				{
					needajust=true;
					for(i=0;i<OutputLayer;i++)
					{
						delta_b[i]=(correctout[p][i]-thirdout[i])*thirdout[i]*(1-thirdout[i]);
						for (j=0;j<MiddleLayer;j++)
							wo[j][i]=wo[j][i]+yita*delta_b[i]*secondout[j];
					}



		
					for(i=0;i<MiddleLayer;i++) //隐层权重的调节
						{
							for (j=0;j<OutputLayer;j++)
								temp=temp+delta_b[j]*wo[i][j];

							for(j=0;j<InputLayer;j++)
							{
								delta_a[i]=secondout[i]*(1-secondout[i])*temp;
								wi[j][i]=wi[j][i]+yita*delta_a[i]*Dot[p][j];
							}
						}
			     	}
				else
					break;

		       	}


		}



	}
	MessageDlg("收敛!",mtInformation,
                    TMsgDlgButtons()<<mbOK,0);

}



//---------------------------------------------------------------------------




void __fastcall TForm1::Button3Click(TObject *Sender)
{//识别字符

int i,j,p;
float t=0.7;
 for(int i=0;i<InputLayer;i++)  //识别时取空间点阵的值
    {
    app[i]=0;
    }
  if(Form1->CheckBox1->Checked){app[0]=1;}
  if(Form1->CheckBox2->Checked){app[1]=1;}
  if(Form1->CheckBox3->Checked){app[2]=1;}
  if(Form1->CheckBox4->Checked){app[3]=1;}
  if(Form1->CheckBox5->Checked){app[4]=1;}
  if(Form1->CheckBox6->Checked){app[5]=1;}
  if(Form1->CheckBox7->Checked){app[6]=1;}
  if(Form1->CheckBox8->Checked){app[7]=1;}
  if(Form1->CheckBox9->Checked){app[8]=1;}
  if(Form1->CheckBox10->Checked){app[9]=1;}
  if(Form1->CheckBox11->Checked){app[10]=1;}
  if(Form1->CheckBox12->Checked){app[11]=1;}
  if(Form1->CheckBox13->Checked){app[12]=1;}
  if(Form1->CheckBox14->Checked){app[13]=1;}
  if(Form1->CheckBox15->Checked){app[14]=1;}
  if(Form1->CheckBox16->Checked){app[15]=1;}
  if(Form1->CheckBox17->Checked){app[16]=1;}
  if(Form1->CheckBox18->Checked){app[17]=1;}
  if(Form1->CheckBox19->Checked){app[18]=1;}
  if(Form1->CheckBox20->Checked){app[19]=1;}
  if(Form1->CheckBox21->Checked){app[20]=1;}
  if(Form1->CheckBox22->Checked){app[21]=1;}
  if(Form1->CheckBox23->Checked){app[22]=1;}
  if(Form1->CheckBox24->Checked){app[23]=1;}
  if(Form1->CheckBox25->Checked){app[24]=1;}
  if(Form1->CheckBox26->Checked){app[25]=1;}
  if(Form1->CheckBox27->Checked){app[26]=1;}
  if(Form1->CheckBox28->Checked){app[27]=1;}
  if(Form1->CheckBox29->Checked){app[28]=1;}
  if(Form1->CheckBox30->Checked){app[29]=1;}
  if(Form1->CheckBox31->Checked){app[30]=1;}
  if(Form1->CheckBox32->Checked){app[31]=1;}
  if(Form1->CheckBox33->Checked){app[32]=1;}
  if(Form1->CheckBox34->Checked){app[33]=1;}
  if(Form1->CheckBox35->Checked){app[34]=1;}
  if(Form1->CheckBox36->Checked){app[35]=1;}
  if(Form1->CheckBox37->Checked){app[36]=1;}
  if(Form1->CheckBox38->Checked){app[37]=1;}
  if(Form1->CheckBox39->Checked){app[38]=1;}
  if(Form1->CheckBox40->Checked){app[39]=1;}
  if(Form1->CheckBox41->Checked){app[40]=1;}
  if(Form1->CheckBox42->Checked){app[41]=1;}
  if(Form1->CheckBox43->Checked){app[42]=1;}
  if(Form1->CheckBox44->Checked){app[43]=1;}
  if(Form1->CheckBox45->Checked){app[44]=1;}
  if(Form1->CheckBox46->Checked){app[45]=1;}
  if(Form1->CheckBox47->Checked){app[46]=1;}
  if(Form1->CheckBox48->Checked){app[47]=1;}
  if(Form1->CheckBox49->Checked){app[48]=1;}
  if(Form1->CheckBox50->Checked){app[49]=1;}
  if(Form1->CheckBox51->Checked){app[50]=1;}
  if(Form1->CheckBox52->Checked){app[51]=1;}
  if(Form1->CheckBox53->Checked){app[52]=1;}
  if(Form1->CheckBox54->Checked){app[53]=1;}
  if(Form1->CheckBox55->Checked){app[54]=1;}
  if(Form1->CheckBox56->Checked){app[55]=1;}
  if(Form1->CheckBox57->Checked){app[56]=1;}
  if(Form1->CheckBox58->Checked){app[57]=1;}
  if(Form1->CheckBox59->Checked){app[58]=1;}
  if(Form1->CheckBox60->Checked){app[59]=1;}
  if(Form1->CheckBox61->Checked){app[60]=1;}
  if(Form1->CheckBox62->Checked){app[61]=1;}
  if(Form1->CheckBox63->Checked){app[62]=1;}
  if(Form1->CheckBox64->Checked){app[63]=1;}
  
 for (i=0;i<MiddleLayer;i++) //数据初始化
	      secondout[i]=0;
 for (j=0;j<OutputLayer;j++)
		thirdout[j]=0;



 for (i=0;i<MiddleLayer;i++)	//隐层输出
 {
    for (j=0;j<InputLayer;j++)
      {secondout[i]=secondout[i] + app[j]*wi[j][i]; }
     
      secondout[i]=1/(1+exp(-(secondout[i]-thita)/t));

 }

  for (i=0;i<OutputLayer;i++)//输出层的输出
  {
     for (j=0;j<MiddleLayer;j++)
      thirdout[i]=thirdout[i]+ secondout[j] * wo[j][i];
      thirdout[i]=1/(1+exp(-(thirdout[i]-thita)/t));
		}
		
  for(p=0;p<SampleNo;p++) //计算误差
  {
    ep=0;
    for(i=0;i<OutputLayer;i++)
      ep=ep+pow((correctout[p][i]-thirdout[i]),2);
    ep=ep/2;
  
        if (ep<0.01)
        {
        Form1->Edit2->Enabled=true;
        Edit2->Text=trueout[p];
         return;
	 }

      }


     if (ep>0.01)
     {MessageDlg("不识别!",mtInformation,
                    TMsgDlgButtons()<<mbOK,0);
     }
 }
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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