2

Je suis en train de concevoir une procédure de rétro-proposition ANR avec 22 entrées et 1 sortie (1 ou 0). Le NN a 3 couches et utilise 10 neurones cachés. Quand je cours le NN il change seulement les poids un petit peu et l'erreur totale pour la production est environ 40%. Intially, je pensais que c'était plus ou moins ajusté mais après avoir changé le nombre de neurones cachés, rien n'a changé.Les pondérations dans la rétro-proposition feed-forward ANN ne changent pas

N est le nombre d'entrées (22)

M est le nombre de neurones cachés (10)

Ceci est le code que j'utilise pour backpropagate

oin est la sortie calculée avant la mise en fonction sigmoïde

oout est la sortie après être passé par la fonction sigmoïde

double odelta = sigmoidDerivative(oin) * (TARGET_VALUE1[i] - oout); 
    double dobias = 0.0; 
    double doweight[] = new double[m]; 

    for(int j = 0; j < m; j++) 
    { 
     doweight[j] = (ALPHA * odelta * hout[j]) + (MU * (oweight[j] - oweight2[j])); 
     oweight2[j] = oweight[j]; 
     oweight[j] += doweight[j]; 
    } // j 

    dobias = (ALPHA * odelta) + (MU * (obias - obias2)); 
    obias2 = obias; 
    obias += dobias; 

    updateHidden(N, m, odelta); 

C'est le code que j'utilise pour changer les neurones cachés.

for(int j = 0; j < m; j++) 
     { 
      hdelta = (d * oweight[j]) * sigmoidDerivative(hin[j]); 

      for(int i = 0; i < n; i++) 
      { 
       dhweight[i][j] = (ALPHA * hdelta * inputNeuron[i]) + (MU * (hweight[i][j] - hweight2[i][j])); 
       hweight2[i][j] = hweight[i][j]; 
       hweight[i][j] += dhweight[i][j]; 


      } 

      dhbias[j] = (ALPHA * hdelta) + (MU * (hbias[j] - hbias2[j])); 
      hbias2[j] = hbias[j]; 
      hbias[j] += dhbias[j]; 
     } ` 
+0

Comment initialisez-vous vos poids? Pourriez-vous nous fournir plus de code - sur comment mettre à jour et initialiser votre réseau? –

+0

Je l'initialise en randomisant les poids entre -1 et 1 – AZstudentCS

Répondre

1

Vous apprenez votre réseau à sortir sur un nœud deux classes. les poids connectés à ce réseau s'adaptent pour prédire une seule classe puis une autre. Donc, la plupart du temps, vos poids sont adaptés à la classe dominante dans vos données. Pour éviter d'avoir ce problème, ajoutez un autre nœud pour avoir deux nœuds sur votre sortie, chacun se référant à une classe.

+0

Comment ferais-je cela? J'apprends juste ANN et je ne suis pas tout à fait sûr que je comprends votre réponse. Qu'entendez-vous par deux classes? – AZstudentCS