Я не уверен, как относиться к весам в этом методе нейронной сети поездов

Я пишу свой своя реализация Нейронная сеть класс в C ++. Я не уверен, как относиться к весам это утверждение:

in = in + (inputs [l] * calcWeights [l]) ;

Причина в том, что там может быть Больше веса, чем входы. Вот мой код:

void Train (int numInputs, int numOutputs, double inputs [], double outputs []) {
// Set the Random Seed:
srand (time (0)) ;

// Weights (n input(s) * n output(s) = n weight branch(es)):
double calcWeights [numInputs * numOutputs] ;

// Errors (n input(s) * n output(s) = n error branch(es)):
double errors [numInputs * numOutputs] ;

// Set the Weights to random:
for (int j = 0 ; j < numInputs ; j = j + 1) {
calcWeights [j] = ((-1 * numInputs) + (((double) rand ()) % (1 * numInputs))) ;
}

// Train:
int i = 0 ;
double in = 0 ;
double out [numOutputs] ;
while (i < 14999) {
// Get the estimated output:
for (int k = 0 ; k < numOutputs ; k = k + 1) {
for (int l = 0 ; l < numInputs ; l = l + 1) {
in = in + (inputs [l] * calcWeights [l]) ;
}

out [k] = in + GetBias () ;
}

for (int m = 0 ; m < numOutputs ; m = m + 1) {
error [m] = outputs [m] - out [m]
}

// Increment the iterator:
i = i + 1 ;
}
}

1

Решение

Из вашего пояснения в комментариях я считаю, что небольшое изменение вашего цикла даст вам то, что вы хотите.

for (int k = 0 ; k < numOutputs ; k = k + 1) {
in = 0; //Reset in to 0 at the beginning of each output loop

for (int l = 0 ; l < numInputs ; l = l + 1) {
in = in + (inputs [l] * calcWeights [l + k*numInputs]) ;
}

out [k] = in + GetBias () ;
}

Вы также должны убедиться, что вы инициализируете все веса выше.

for (int j = 0 ; j < (numInputs * numOutputs) ; j = j + 1) {
calcWeights [j] = ((-1 * numInputs) + (((double) rand ()) % (1 * numInputs))) ;
}

Для пары вариантов стиля я просто хочу указать, что вы можете заменить k = k + 1 с просто ++k, Точно так же вы можете заменить in = in + ...; с in += ...;

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector