2011-05-02 4 views
-1

J'ai écrit un code pour un réseau de neurones utilisant un algorithme de propagation inverse et pour la propagation d'entrées j'ai écrit le code suivant, mais seulement pour deux entrées, son défaut de segmentation d'affichage. .Je wan ne peut le comprendre ....Erreur de segmentation dans le réseau neuronal

void propagateInput(int cur,int next) 
{ 
    cout<<"propagating input"<<cur<<" "<<next<<endl; 
    cout<<"Number of nerons : "<<neuronsInLayer[cur]<<" "<<neuronsInLayer[next]<<endl; 
    for(int i = 0;i < neuronsInLayer[next];i++) 
    { 
     neuron[next][i].output = 0; 
     for(int j = 0;j < neuronsInLayer[cur];j++) 
     { 
      cout<<neuron[cur][j].output<<" "; 
      cout<<neuron[next][i].weight[j]<<"\n"; 
      neuron[next][i].output += neuron[next][i].weight[j] * neuron[cur][j].output; 
     } 
     cout<<"out["<<i<<"] = "<<neuron[next][i].output<<endl; 
    } 
    cout<<"completed propagating input.\n"; 
} 
+0

Veuillez ajouter des détails sur l'allocation des tableaux que vous parcourez. Indiquez également quelle opération a spécifiquement causé l'erreur de segmentation. Avez-vous utilisé un débogueur? – moooeeeep

Répondre

0
for(int i = 0;i < neuronsInLayer[next];i++)... 

neuronsInLayer [suivante] est un pointeur. Peut-être que si je connaissais le type de NeuronsInLayer je pourrais vous aider plus.

+1

Comment savez-vous "c'est un pointeur"? – cnicutar

+0

int * neuronsInLayer; –

+0

@soma sekhar - Est-ce que 'neuronsInLayer' pointe vers des emplacements de mémoire valides? A-t-il un index où il peut pointer vers 'next'? – Mahesh

0

Ce n'est pas assez près d'informations pour déboguer votre code. Aucune information sur les numéros de ligne ou comment les structures sont mises en mémoire ou celles qui sont valides, etc.

Alors laissez-moi vous dire comment vous pouvez trouver cela vous-même. Si vous utilisez un système Unix/Mac puis utilisez le débogueur GDB sur votre exécutable, a.out:

$ gdb a.out 
> run 
*segfault* 
> where 

Visual Studio a un grand débogueur aussi bien, il suffit d'exécuter en mode débogage et il vous dira où segfault est et laissez-vous inspecter la mémoire.