2011-05-02 81 views
-1

我一直在使用反向傳播算法編寫神經網絡的代碼,並且用於傳播輸入我已經編寫了下面的代碼,但只是針對兩個輸入,它顯示的分段錯誤。是否存在代碼錯誤.I灣不能弄清楚....神經網絡中的分割錯誤

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

請在迭代的任何數組的分配中添加詳細信息。還請說明具體造成分段故障的操作。你使用了一個調試器嗎? – moooeeeep 2012-08-17 21:06:43

回答

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

neuronsInLayer [下]是一個指針。也許如果我知道神經元類型,我可以幫助你更多。

+1

你怎麼知道「這是一個指針」? – cnicutar 2011-05-02 05:31:07

+0

int * neuronsInLayer; – 2011-05-02 05:35:48

+0

@soma sekhar - 「neuronsInLayer」指向有效的內存位置嗎?它有一個可以指向'next'的索引嗎? – Mahesh 2011-05-02 05:40:31

0

這沒有足夠的信息來調試您的代碼。沒有關於行號的信息,或者結構如何佈置在內存中或哪些是有效的等等。

因此,讓我告訴你如何自己找到它。如果你使用的是UNIX/Mac上,然後使用gdb調試你的可執行文件,a.out的:

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

Visual Studio中有一個很棒的調試以及,只要運行在調試模式下,它會告訴你段錯誤,並讓你檢查內存。