Выход нейронной сети в переполнении стека

Я хочу создать функцию, которая вычисляет выход нейронной сети. Элементы моего NN
является входным вектором 19D и выходным вектором 19D. Я выбираю один скрытый слой с 50 нейронами. Мой код следующий, но я не совсем уверен, работает ли он правильно.

double *BuildPlanner::neural_tactics(){norm();  //normalize input vector
ReadFromFile();   // load weights W1 W2 b1

double hiddenLayer [50][1];for(int h=0; h<50; h++){
hiddenLayer[h][0] =0;
for(int f = 0; f < 19; f++){

hiddenLayer[h][0] = hiddenLayer[h][0] + W1[h][f]*input1[f][0];
}
}

double HiddenLayer[50][1];

for(int h=0; h<50; h++){
HiddenLayer[h][0] = tanh(hiddenLayer[h][0] + b1[h][0]);
}

double outputLayer[50][1];

for(int h=0; h<19; h++){
for(int k=0; k<50; k++){
outputLayer[h][0] = outputLayer[h][0] + W2[h][k]*HiddenLayer[k][0];
}
}

double Output[19];

for(int h=0; h<19; h++){

Output[h] = tanh(outputLayer[h][0]);
}

return Output;
}

На самом деле я не совсем уверен насчет умножения матриц. W1 * вход + b1, где размер
из матриц 50×19 * 19×1 + 50×1 и W2 * outHiddenLayer 19×50 * 50×1!

0

Решение

Ваше умножение матриц выглядит хорошо для меня, но есть и другие проблемы — `outputLayer равен 50×1, но а) вы перебираете только первые 19 элементов, и б) у вас есть это на RHS вашего уравнения

outputLayer[h][0] = outputLayer[h][0] + W2[h][k]...

до того, как этот элемент был когда-либо определен. Это может быть причиной всех ваших проблем. Кроме того, хотя я предполагаю, что вы делаете outputLayer 2-мерный, чтобы они выглядели как матрица, он совершенно бесплатный и замедляет работу, когда второе измерение имеет размер 1 — просто объявите его, а остальные как

double outputLayer[50];

так как это вектор, и они всегда одномерны, это сделает ваш код более понятным.

1

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

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