我想创建一个计算神经网络输出的函数。我的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 * input + b1的大小
矩阵的50x19 * 19x1 + 50x1和W2 * outHiddenLayer 19x50 * 50x1!
最佳答案
您的矩阵乘法在我看来还可以,但是还有其他问题-`outputLayer为50x1,但是a)您仅迭代前19个元素,b)在方程的RHS中使用它outputLayer[h][0] = outputLayer[h][0] + W2[h][k]...
在定义该元素之前。那可能会导致您所有的问题。此外,尽管我假设您正在制作outputLayer
二维以使它们看起来像矩阵,但是当第二维的大小为1时,它是完全免费的,并且放慢了速度-只需声明它,其他维为double outputLayer[50];
因为它是一个向量,并且始终都是一维的,所以实际上可以使您的代码更清晰。