Cacul des erreurs d'un réseau de neurones.

Cacul des erreurs d'un réseau de neurones. - Ada - Programmation

Marsh Posté le 21-08-2010 à 14:16:07    

bonjour,
 
D'habitude je calcule les erreur de cette manière :
 

Code :
  1. loop
  2.              All_Patterns :
  3.                  for Pattern in 1..Train_length loop
  4.                     NN_Train.Train;
  5.                     NN_Train.Respond (Pattern, Response);
  6.                     for I in Response'Range loop
  7.                        Error := Error + (Desired_Output(Pattern)(i) -   Response(i) );
  8.                     end loop;
  9.                     RMS_Error := RMS_Error + ((Error/Real(Response'Length)) ** 2);
  10.                     Error := 0.0;
  11.                     Response := (others => 0.0);
  12.                  end loop All_Patterns;
  13.                  RMS_Error := Real_Math.Sqrt(RMS_Error / Real (train_length)) ;
  14.                  put("RMS_Error : " );
  15.                  Real_Io.Put(RMS_Error);
  16.                  put(" ; Converged : " );
  17.                  Real_Io.put(converged);
  18.                  Put(Character'Val(13));
  19.                  if (RMS_Error < Converged) or
  20.                    (Epoch > Max_Epochs) then
  21.                     exit;
  22.                  end if;
  23.                  Epoch := Epoch + 1;
  24.              end loop;


 
Mais là je n'ai qu'un pattern à chaque apprentissage et j'ai donc simplifier comme suit :
 

Code :
  1. loop
  2.                     NN_Expl.Train;
  3.                     Response := (others => 0.0);
  4.                     NN_Expl.Respond (1, Response);
  5.                     Error := 0.0;
  6.                     RMS_Error := 0.0;
  7.                     for I in Response'Range loop
  8.                        Error := Error + (Desired(i) -   Response(i) );
  9.                     end loop;
  10.                     RMS_Error := RMS_Error + ((Error/Real(Response'Length)) **2);
  11.                     RMS_Error := Real_Math.Sqrt(RMS_Error);
  12.                     Epoch := Epoch + 1;
  13.  
  14.                     if (Epoch > 50) and then
  15.                       ((RMS_Error <= Converged) or
  16.                        (Epoch > Max_Epochs)) then
  17.                        exit;
  18.                     else
  19.                        Text_Io.Put ("Epoch" );
  20.                        Text_Io.Put (Integer'Image (Epoch) );
  21.                        Text_Io.Put(" => RMS_Error: " );
  22.  
  23.                        Real_Io.Put(RMS_Error);
  24.                        Text_Io.Put(Character'Val(13));
  25.                     end if;
  26.                  end loop;


 
Malgré cette simple simplification, je vois augmenter sans cesse RMS_Error au lieu que celui-ci décrémente petit à petit.
 
Pouvez vous m'aider, s'il vous plait ?


Message édité par Profil supprimé le 21-08-2010 à 14:21:04
Reply

Marsh Posté le 21-08-2010 à 14:16:07   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed