我正在设计一个带有22个输入和1个输出(1或0)的前馈BackPropogation ANN。神经网络有3层,使用10个隐藏的神经元。当我运行NN时,它只会轻微改变权重,输出的总误差约为40%。在本质上,我认为它是在过度/不足之下,但在改变了隐藏的神经元的数量之后,没有任何变化。前馈backpropogation中的权重ANN不会改变
N是输入(22)
数目M是在输出计算隐藏神经元(10)
这是我使用的backpropagate
OIN代码的数投入双曲线函数之前
oout是通过双曲线函数会后的输出
double odelta = sigmoidDerivative(oin) * (TARGET_VALUE1[i] - oout);
double dobias = 0.0;
double doweight[] = new double[m];
for(int j = 0; j < m; j++)
{
doweight[j] = (ALPHA * odelta * hout[j]) + (MU * (oweight[j] - oweight2[j]));
oweight2[j] = oweight[j];
oweight[j] += doweight[j];
} // j
dobias = (ALPHA * odelta) + (MU * (obias - obias2));
obias2 = obias;
obias += dobias;
updateHidden(N, m, odelta);
这是我用来改变隐藏的神经元的代码。
for(int j = 0; j < m; j++)
{
hdelta = (d * oweight[j]) * sigmoidDerivative(hin[j]);
for(int i = 0; i < n; i++)
{
dhweight[i][j] = (ALPHA * hdelta * inputNeuron[i]) + (MU * (hweight[i][j] - hweight2[i][j]));
hweight2[i][j] = hweight[i][j];
hweight[i][j] += dhweight[i][j];
}
dhbias[j] = (ALPHA * hdelta) + (MU * (hbias[j] - hbias2[j]));
hbias2[j] = hbias[j];
hbias[j] += dhbias[j];
} `
你如何初始化你的体重?您能否提供更多的代码 - 关于如何更新和初始化您的网络? –
我通过随机化-1和1之间的权重对它进行初始化 – AZstudentCS