C++ c+中的神经网络输出+;

C++ c+中的神经网络输出+;,c++,neural-network,C++,Neural Network,我想创建一个计算神经网络输出的函数。我的NN的元素 是一个19D输入向量和一个19D输出向量。我选择了一个有50个神经元的隐藏层。我的代码如下,但我不确定它是否正常工作 double *BuildPlanner::neural_tactics(){ norm(); //normalize input vector ReadFromFile(); // load weights W1 W2 b1 double hiddenLayer [50][1];

我想创建一个计算神经网络输出的函数。我的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;
}
double*BuildPlanner::neural_战术(){
norm();//规范化输入向量
ReadFromFile();//加载权重W1 W2 b1
双隐层[50][1];

对于(inth=0;h你的矩阵乘法在我看来还行,但还有其他问题--`outputLayer是50x1,但a)你只迭代前19个元素,b)你的矩阵乘法在方程的RHS上

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

在这个元素被定义之前。这可能会导致你所有的问题。而且,尽管我假设你将
outputLayer
2维,使它们看起来像矩阵,但这完全是无缘无故的,当第二个维度的大小为1时,事情会变慢——只需将它和其他维度声明为

双输出层[50];


因为它是一个向量,而且这些都是一维的,所以它实际上会使代码更清晰。

您可以先不硬编码所有这些大小,这样您就可以很容易地插入一些小数字并手动查看结果。是的,这是一个很好的开始。但实际上,我的问题是乘法是否按照我想要的方式工作!检查此库:outputLayer NN的输出大小为19x1。定义错误!只是忘了将50改为19!!@FereRes Ok。但当然b)是主要问题,这可以解释为什么结果“奇怪”——在这种情况下,使用未定义的值不会产生编译时或运行时错误,只会导致未定义的行为。