c ++中的神经网络输出

时间:2012-09-04 17:45:56

标签: 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];


    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所在的大小 矩阵是50x19 * 19x1 + 50x1和W2 * outHiddenLayer 19x50 * 50x1!

1 个答案:

答案 0 :(得分:1)

你的矩阵乘法看起来没问题,但是还有其他问题--`outputLayer是50x1但a)你只遍历前19个元素,b)你在等式的RHS上有它

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

之前定义了该元素。这可能会导致你所有的问题。此外,虽然我假设你正在制作outputLayer二维以使它们看起来像矩阵一样,但是当第二个维度的大小为1时,它是完全无偿的并且会减慢速度 - 只是声明它而其他维度为

double outputLayer[50];

因为它是一个向量,它们总是一维的,所以它实际上会使你的代码更清晰。