2

我正在设计一个带有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]; 
     } ` 
+0

你如何初始化你的体重?您能否提供更多的代码 - 关于如何更新和初始化您的网络? –

+0

我通过随机化-1和1之间的权重对它进行初始化 – AZstudentCS

回答

1

你正在学习你的网络在一个节点上输出两个类。连接到这个网络的权重正在适应预测一个类然后另一个。所以大部分时间你的权重都适合你的数据中的主导类。为避免出现此问题,请添加另一个节点,以在您的输出中拥有两个节点,每个节点引用一个类。

+0

我该怎么做呢?我只是在学习ANN,而我不太清楚我是否理解你的答案。两节课你的意思是什么? – AZstudentCS