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];
} `
가중치는 어떻게 초기화합니까? 더 많은 코드를 제공 할 수 있습니까? 네트워크를 업데이트하고 초기화하는 방법은 무엇입니까? –
-1과 1 사이의 가중치를 무작위로 초기화하여 초기화합니다. – AZstudentCS