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

📄 bp.~cpp

📁 BP批处理源代码
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#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 + -