2

22 개의 입력 및 1 개의 출력 (1 또는 0 중 하나)으로 Feed-Forward BackPropogation ANN을 설계했습니다. NN은 3 개의 레이어를 가지고 있으며 10 개의 숨겨진 뉴런을 사용합니다. NN을 실행하면 가중치가 약간 변경되고 출력의 총 오류는 약 40 %입니다. 처음에는 과도한 피팅이라고 생각했지만 숨겨진 뉴런의 수를 변경 한 후에는 아무 것도 변경되지 않았습니다.피드 포워드 역 전파에서의 가중치 ANN이 변경되지 않음

N은 입력의 수 (22)

M 출력을 산출 숨겨진 뉴런 (10)

이 제가

OIN을 backpropagate 위해 사용하고있는 코드의 개수이다 시그 모이 드 함수에 넣기 전에

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); 
,174,

이것은 숨겨진 뉴런을 변경하는 데 사용하는 코드입니다.

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