在训练神经网络期间EXC_BAD_ACCESS / KERN_INVALID_ADDRESS

时间:2014-12-07 18:12:49

标签: c segmentation-fault neural-network

我在MAC OS X Yosemite上用c99编译我的神经网络。

gdb没有给我很多信息,所以我用了很多printf来定义我的问题所在。 以下是gdb给我的信息:

  

entering into error output 0

     

0.000000

     

Program received signal EXC_BAD_ACCESS, Could not access memory.   Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000   0x0000000000000000 in ?? ()

这是我的代码:

127         for (int k = 0; k < 94; k++)
128         {
129             printf("\nentering into error output %d\n", k);
130             printf("\n%lf\n", results[k]);
131             printf("\n%lf\n", outputNeuron[k].output(&outputNeuron[k]));
132             printf("\n%lf\n", sigmoid.derivative(outputNeuron[k].output(&outputNeuron[k])));
133 
134             outputNeuron[k].error =
135                 sigmoid.derivative(outputNeuron[k].output(&outputNeuron[k]))     *  
136                 (results[k] - outputNeuron[k].output(&outputNeuron[k]));
137 
138             printf("\n adjustWeights output %d\n", k);
139             outputNeuron[k].adjustWeights(&outputNeuron[k]);
140 
141             printf("\nerror output %d ok\n", k);
142         }

如果您还需要更多,请问因为我认为您是我的最后希望

编辑:

 77     TNeuron outputNeuron[94];
 78     if (is_empty(file))
 79         for (int k = 0; k < 94; k++)
 80         {
 81             outputNeuron[k] = TNeuron_create();
 82             outputNeuron[k].randomizeWeights(&outputNeuron[k]);
 83         }

文件现在为空

这里是TNeuron_create():

 37 TNeuron TNeuron_create()
 38 {
 39     struct TNeuron This;
 40     TNeuron_Init(&This);
 41     return This;
 42 }
 43 
 44 void TNeuron_Init(struct TNeuron *This)
 45 {
 46     This->output = TNeuron_output;
 47 
 48     This->randomizeWeights = TNeuron_randomizeWeights;
 49 
 50     This->adjustWeights = TNeuron_adjustWeights;
 51 
 52     for (int i = 0; i < 20; i++)
 53         for (int j = 0; j < 20; j++)
 54         {
 55             This->inputs[i][j] = 0;
 56             This->weights[i][j] = 0;
 57         }
 58 
 59     This->error = 0;
 60 
 61     This->biasWeight = 0;
 62 }

编辑2:

  5 double TNeuron_output(struct TNeuron *This)
  6 {
  7     TSigmoid sigmoid = TSigmoid_create();
  8 
  9     double op = 0;
 10     for (int i = 0; i < 20; i++)
 11         for (int j = 0; j < 20; j++)
 12             op += This->weights[i][j] * This->inputs[i][j];
 13 
 14     return sigmoid.output(op + This->biasWeight);
 15 }

0 个答案:

没有答案