📄 unit1.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 + -