2012-09-04 123 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

好的馬特感謝您的提示! –