2012-09-04 89 views
0

我想创建一个计算神经网络输出的函数。我的NN 的元素是一个19D输入向量和一个19D输出向量。我选择了一个有50个神经元的隐藏层。我的代码是以下,但我不太确定它是否正常工作。C++中的神经网络输出

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!

+0

您可以先不对所有这些尺寸进行硬编码,因此您可以轻松插入一些小数字并手工完成结果。 – Thomas

+0

是它的一个好开始。但实际上,我的问题是如果乘法运行符合我的需要! –

+0

检查此库:http://sourceforge.net/projects/c-c-neural-networks/ – SomethingSomething

回答

1

你的矩阵乘法看起来不错给我,但也有其他的问题 - `outputLayer是50X1但)你只能通过第19个元素迭代,和b)你必须在你方程式的RHS

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

之前,该元素已被定义。这可能会导致你所有的问题。另外,虽然我假设你正在做outputLayer 2维,使它们看起来类似矩阵,它是完全免费的,并会减慢速度,当第二个维度具有尺寸1 - 只是声明它,其他的都是

double outputLayer[50];

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

+0

outputLayer NN的输出具有19x1大小。错误的定义!只是忘了改50到19! –

+0

@ FereRes好的。但是当然b)是真正的主要问题,并且可以解释为什么你的结果是'怪异的' - 使用未定义的值在这种情况下不会产生编译或运行时错误,而只会导致未定义的行为。 –

+0

好的马特感谢您的提示! –