Δημοσιεύτηκε: 26 Ιαν 2012, 02:58
Να ρωτησω για ενα segmentation fault που μου εχει σπασει τους νευρωνες;
αρχικοποιηση:
Και εδω ειναι το προβλημα:
Στην 2η επαναληψη του
for(i=0;i<H+1;i++){
Οταν παει στο εμφωλευμενο for, j=1, οταν παει να προσπελασει το mlp[1][i].w[j] χτυπαει segfault.
Γενικα, βλεπετε να αλλαζει καπου μεσα στην συναρτηση backprop το διανυσμα w?
- Κώδικας: Επιλογή όλων
typedef struct neuron{
double y,s,delta,total_err;
double * w;
}neuron;
neuron **mlp;
αρχικοποιηση:
- Κώδικας: Επιλογή όλων
void init(){
int i,j;
// we include every neuron's bias at as an extra neuron in the previous level
mlp = (neuron **) malloc(3 * sizeof(neuron *));
mlp[0] = (neuron*) malloc(D+1 * sizeof(neuron));
mlp[1] = (neuron*) malloc(H+1 * sizeof(neuron));
mlp[2] = (neuron*) malloc(K * sizeof(neuron));
// input level
mlp[0][D].y=1.0;
for(i=0;i<D+1;i++){
mlp[0][i].w= (double *) malloc(H*sizeof(double));
for(j=0;j<H;j++){
mlp[0][i].w[j] = RandomReal(-1.0,1.0);
}
}
// hidden level
mlp[0][H].y=1.0;
for(i=0;i<H+1;i++){
mlp[1][i].w = (double *) malloc(K*sizeof(double));
for(j=0;j<K;j++){
mlp[1][i].w[j] = RandomReal(-1.0,1.0);
}
}
// output level
for(i=0;i<K;i++){
mlp[2][i].w = NULL;
}
printf("End of mlp initialization\n");
return;
}
Και εδω ειναι το προβλημα:
- Κώδικας: Επιλογή όλων
void backprop(double *t){
int i,j;
//calculate the utput errors
for(i=0;i<K;i++){
mlp[2][i].delta = output_prime(mlp[2][i].y)* (mlp[2][i].y - t[i]);
mlp[2][i].total_err+= mlp[2][i].delta;
}
printf("BP'd output lvl\n");
for(i=0;i<H+1;i++){
printf("Dealing with hidden neuron # %d\n",i);
mlp[1][i].total_err=0.0;
double sum=0.0;
// calc the incoming error from the output.Since network fully connected, include all the output.
for(j=0;j<K;j++) [color=#FF0000]sum += mlp[2][j].delta * (mlp[1][i].w[j]);[/color]
mlp[1][i].delta = sum * output_prime(mlp[1][i].y);
mlp[1][i].total_err +=mlp[1][i].delta;
}
printf("BP'd hidden lvl\n");
return;
}
Στην 2η επαναληψη του
for(i=0;i<H+1;i++){
Οταν παει στο εμφωλευμενο for, j=1, οταν παει να προσπελασει το mlp[1][i].w[j] χτυπαει segfault.
Γενικα, βλεπετε να αλλαζει καπου μεσα στην συναρτηση backprop το διανυσμα w?