Neural Network archetype in C++[4]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

  for(int epoch=0;epoch<times;epoch++){                      // for each training epoch:
//  if (fullytrained) break;
//  cout<<"---------------------"<<endl;
     
  double in_to_hidden[NUM_HIDDEN]; 
  double a_hidden[NUM_HIDDEN];
  double delta_hidden[NUM_HIDDEN];
 
  double in_to_output[NUM_OUTPUT];
  double a_output[NUM_OUTPUT];
  double delta_output[NUM_OUTPUT];

  double err_output[NUM_OUTPUT];  // errors
 
 
 for (curr_pattern_idx=0; curr_pattern_idx<number_of_pattern_used ; curr_pattern_idx++) {

/*
    curr_pattern_idx++;                  // for each training pattern p:   
    if (curr_pattern_idx>=NUM_PATTERNS)
        curr_pattern_idx=0;
*/   
   
  
    CalAll(xp[curr_pattern_idx], in_to_hidden, a_hidden, in_to_output, a_output);
    
//    cout <<endl;  
       
    for(int i=0;i<NUM_OUTPUT;i++){ // for each  output:                
 
    err_output[i] = yp[curr_pattern_idx][i] - a_output[i];   // sigmoid(in) is our prediction      
    delta_output[i] = err_output[i] * derivative( in_to_output[i] );
//    cout << "delta_out["<<i<<"]= "<<err_output[i]<<"*g'("<< in_to_output[i]<<")= "<<delta_output[i]<<endl ;
  
    } 
//    cout <<"Err: "<< (err_output[0]+err_output[1])/2 << "\n";      // print out the errors for each output 
   
/*    if ( abs ((err_output[0]+err_output[1])/2)  < 0.00001 )
        {
        fullytrained=true;
        cout <<"Fully trained!" << endl;
        break;
    }
*/  
//------------------------------------------       
//    cout<<endl;
    for(int j=0;j<NUM_HIDDEN;j++){
    double tmp = 0.0;       
   
//    cout<<"sum="; 
    for(int i=0; i<NUM_OUTPUT; i++)  {                 // compute delta using back-propagation
        tmp+= delta_output[i] *  weights2[i][j];   
//        cout<<delta_output[i]<<"*"<<weights2[j][i]<<"+";
    }   
//    cout<<"="<<tmp<<endl;
    delta_hidden[j] = derivative(in_to_hidden[j]) * tmp;
//    cout << "delta_hidden["<<j<<"]= "<<"g'("<< in_to_hidden[j]<<")*"<<tmp<<"= "<<delta_hidden[j]<<endl ;
    }  
   
//-------------------------------------------
//    cout <<endl;
   
   
    for(int i=0;i<NUM_OUTPUT;i++){ // for each  output adjust the weights:
        weights2[i][0] = weights2[i][0] + alpha *  (double)(-1) * delta_output[i];   
        for(int j=1;j<=NUM_HIDDEN;j++){    
//          cout<< "w2["<<j<<"]["<<i<<"]="<<weights2[j][i];    
        weights2[i][j] = weights2[i][j] + alpha *  a_hidden[j-1] * delta_output[i];
//         cout << &

本文关键:Neural Network archetype in C++
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top