-1

バックプロパゲーションアルゴリズムを使用してニューラルネットワークのコードを作成しており、入力を伝播するために次のコードを作成しましたが、2つの入力に対してのみ、セグメンテーション違反を表示しています。アウト....

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";
}
4

2 に答える 2

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

neuronInLayer[next] はポインタです。おそらく、ニューロンInLayerのタイプを知っていれば、もっとあなたを助けることができます.

于 2011-05-02T05:30:12.443 に答える
0

これは、コードをデバッグするのに十分な情報ではありません。行番号、構造体がメモリ内でどのようにレイアウトされているか、どれが有効かなどに関する情報はありません。

では、これを自分で見つける方法を教えてください。Unix/Mac を使用している場合は、実行可能ファイル a.out で GDB デバッガーを使用します。

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

Visual Studio には優れたデバッガーもあります。デバッグ モードで実行するだけで、segfault の場所がわかり、メモリを検査できます。

于 2011-05-02T05:31:37.150 に答える