「第2章 階層型のニューラルネットワーク」における各プログラムの初期化ルーチン initialize() では,結合の重みを保持する配列だけを適当な乱数で初期値を与えていまし たが,バイアス等も含めて以下のように変更してください.
Cコンパイラでは通常,配列は 0 に初期化されますので,それを期待して以下の初期化は 行っていませんでしたが,C++では必ずしもそうではないので,積極的に 0 に初期化する ようにしておきます.つまり,C++では,動的に配列がとられるのが基本ですから,C の様な 初期化を期待できません.
なお,「いろいろやらせてみよう」のシミュレータについては,動的な配列を採用してい るので,同様の初期化は行なっています.
for( i = 0; i < No_HUnits; i++ )
for( j = 0; j < No_IUnits; j++ )
{ witoh[i][j] = urand();
dwitoh[i][j] = urand();
}
for( i = 0; i < No_OUnits; i++ )
for( j = 0; j < No_HUnits; j++ )
{ whtoo[i][j] = urand();
dwhtoo[i][j] = urand();
}
for( i = 0; i < No_HUnits; i++ )
{ hbias[i] = dhbias[i] = 0.0; }
for( i = 0; i < No_OUnits; i++ )
{ obias[i] = dobias[i] = 0.0; }
|