2

Я разрабатываю ANN с обратной связью с обратной связью с 22 входами и 1 выходом (либо 1, либо 0). NN имеет 3 слоя и использует 10 скрытых нейронов. Когда я запускаю NN, он меняет весы чуть-чуть, а общая ошибка для выхода составляет около 40%. По сути, я думал, что это было закончено/подобрано, но после того, как я изменил количество скрытых нейронов, ничего не изменилось.Вес в обратной линии обратной связи ANN не изменяется

N- число входов (22)

М представляет собой количество скрытых нейронов (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

Вы изучаете свою сеть для вывода на одном узле двух классов. веса, подключенные к этой сети, адаптируются для предсказания одного класса, а затем другого. поэтому большую часть времени ваши веса адаптируются к классу dominate в ваших данных. чтобы избежать этой проблемы, добавьте еще один узел, чтобы иметь два узла на вашем выходе, каждый из которых относится к одному классу.

+0

Как бы я это сделал? Я просто изучаю ANN, и я не совсем уверен, что понимаю ваш ответ. Что вы подразумеваете под двумя классами? – AZstudentCS

Смежные вопросы