📄 bp.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "fstream.h"
#include "bp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
initial=false;
onset_time=false;
Timer1->Enabled =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
void initialize(int a,int b,int c);
void output_matrix(int a,int b,int c,int d,int e);
if(!initial)
{
Button2->Enabled =false;
Button3->Enabled =false;
Button4->Enabled =false;
Button5->Enabled =false;
hide_layer_num=StrToInt(Edit2->Text);
hide_fir_layer_num=StrToInt(Edit3->Text);
if(hide_layer_num==2)
{
hide_sec_layer_num=StrToInt(Edit4->Text);
}
else
{
hide_sec_layer_num=0;
}
factor=StrToFloat(Edit6->Text);
initialize(hide_layer_num,hide_fir_layer_num,hide_sec_layer_num);
output_matrix(hide_layer_num,input_num,hide_fir_layer_num,hide_sec_layer_num,output_num);
initial=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
void initialize(int a,int b,int c);
void output_matrix(int a,int b,int c,int d,int e);
void forward_cal(int a,int b,int c,int d,int e);
void back_cal_grade(int a,int b,int c,int d);
void back_cal(int a,int b, int c,int d);
void show_tol();
int i,j;
double sum_residual;
Timer1->Enabled =false;
if(!initial)
{
Button1->Enabled =false;
Button3->Enabled =false;
Button4->Enabled =false;
Button5->Enabled =false;
hide_layer_num=StrToInt(Edit2->Text);
hide_fir_layer_num=StrToInt(Edit3->Text);
factor=StrToFloat(Edit6->Text);
learn_space=StrToFloat(Edit7->Text);
if(hide_layer_num==2)
{
hide_sec_layer_num=StrToInt(Edit4->Text);
}
else
{
hide_sec_layer_num=0;
}
factor=StrToFloat(Edit6->Text);
initialize(hide_layer_num,hide_fir_layer_num,hide_sec_layer_num);
//output_matrix(hide_layer_num,input_num,hide_fir_layer_num,hide_sec_layer_num,output_num);
initial=true;
}
sum_residual=0.0;
for(j=0;j<output_num;j++)
{
batch_output_grade[j]=0.0;
}
for(j=0;j<hide_sec_layer_num;j++)
{
batch_hide_grade[j]=0.0;
}
for(j=0;j<hide_fir_layer_num;j++)
{
batch_input_grade[j]=0.0;
}
for(i=0;i<sample_num;i++)
{
forward_cal(i,input_num,hide_fir_layer_num,hide_sec_layer_num,output_num);
back_cal_grade(i,hide_fir_layer_num,hide_sec_layer_num,output_num);
for(j=0;j<output_num;j++)
{
batch_output_grade[j]=batch_output_grade[j]+temp_output_grade[j];
}
for(j=0;j<hide_sec_layer_num;j++)
{
batch_hide_grade[j]=batch_hide_grade[j]+temp_hide_grade[j];
}
for(j=0;j<hide_fir_layer_num;j++)
{
batch_input_grade[j]=batch_input_grade[j]+temp_input_grade[j];
}
for(j=0;j<output_num;j++)
{
sum_residual=sum_residual+pow((output[i][j]-hide_output[j]),2)/2.0;
}
}
for(j=0;j<output_num;j++)
{
batch_output_grade[j]=batch_output_grade[j]/sample_num;
}
for(j=0;j<hide_sec_layer_num;j++)
{
batch_hide_grade[j]=batch_hide_grade[j]/sample_num;
}
for(j=0;j<hide_fir_layer_num;j++)
{
batch_input_grade[j]=batch_input_grade[j]/sample_num;
}
sum_residual=sum_residual/sample_num;
sum_residual=sum_residual/output_num;
if(sum_residual>0.001)
{
back_cal(input_num,hide_fir_layer_num,hide_sec_layer_num,output_num);
}
Timer1->Enabled =true;
}
//---------------------------------------------------------------------------
void initialize(int a,int b,int c)
{
String string_line;
String file_name,temp;
double max_output;
int i,j,k;
FILE *fp;
char *ch;
double r;
// Form1->OpenDialog1->Execute();
//file_name=Form1->OpenDialog1->FileName;
file_name="C:\\sample.txt";
if(file_name!="")
{
fp=fopen(file_name.c_str (),"r");
j=filelength(fileno(fp));
ch=new char[j];
for(i=0;i<j;i++)
{
ch[i]=fgetc(fp);
}
fclose(fp);
string_line =ch;
delete []ch;
i=string_line.Pos("sample_number:");
string_line.Delete (1,(i+13));
i=string_line.Pos("\n");
temp=string_line.SubString(1,(i-1));
Form1->sample_num =StrToInt(temp);
string_line.Delete(1,i);
i=string_line.Pos("input_num:");
string_line.Delete (1,(i+9));
i=string_line.Pos("\n");
temp=string_line.SubString(1,(i-1));
Form1->input_num =StrToInt(temp);
string_line.Delete(1,i);
i=string_line.Pos("output_num:");
string_line.Delete (1,(i+10));
i=string_line.Pos("\n");
temp=string_line.SubString(1,(i-1));
Form1->output_num =StrToInt(temp);
string_line.Delete(1,i);
for(j=0;j<Form1->sample_num ;j++)
{
for(k=0;k<Form1->input_num;k++)
{
i=string_line.Pos(" ");
temp=string_line.SubString(1,(i-1));
Form1->in_put[j][k]=StrToFloat(temp);
string_line.Delete(1,(i+2));
}
for(k=0;k<Form1->output_num;k++)
{
i=string_line.Pos(" ");
temp=string_line.SubString(1,(i-1));
Form1->output[j][k]=StrToFloat(temp);
string_line.Delete(1,(i+2));
}
i=string_line.Pos("\n");
string_line.Delete(1,i);
}
//-----------------------------结果归一化--------------------------------
for(i=0;i<Form1->output_num;i++)
{
max_output=0.0;
for(j=0;j<Form1->sample_num ;j++)
{
if(max_output<fabs(Form1->output[j][i]))
{
max_output=fabs(Form1->output[j][i]);
}
}
max_output=max_output*1.25;
Form1->output_untiary[i]=max_output;
for(j=0;j<Form1->sample_num;j++)
{
Form1->output[j][i]=Form1->output[j][i]/max_output;
}
}
//-----------------------------结束结果归一化---------------------------
//----------------------------initial hide_layer---(-2.4/F,2.4/F)------------------------------------------
for(i=0;i<Form1->input_num;i++)
{
for(j=0;j<b;j++)
{
k=random(2000);
r=(k-1000)*2.4/(1000.0*Form1->input_num);
Form1->input_to_hide[i][j]=r;
}
}
if(a==1)
{
for(i=0;i<b;i++)
{
for(j=0;j<Form1->output_num;j++)
{
k=random(2000);
r=(k-1000)*2.4/(1000.0*b);
Form1->hide_to_output[i][j]=r;
}
}
}
else
{
for(i=0;i<b;i++)
{
for(j=0;j<c;j++)
{
k=random(2000);
r=(k-1000)*2.4/(1000.0*b);
Form1->hide_to_hide[i][j]=r;
}
}
for(i=0;i<c;i++)
{
for(j=0;j<Form1->output_num;j++)
{
k=random(2000);
r=(k-1000)*2.4/(1000.0*c);
Form1->hide_to_output[i][j]=r;
}
}
}
//----------------------------end initial hide_layer-----------------------------------------
}
Form1->pre_input_ver_hide[0][0]=123456.0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -