我正在使用FANN庫來構建神經網絡來執行迴歸問題。事情是,一旦網絡已經接受相關訓練集的訓練(似乎工作得很好),每一次測試都會輸出完全相同的結果。換句話說,根據我的16個預測變量的任何狀態,根據ANN的預測輸出是相同的。C++ FANN fann_run總是產生相同的輸出
我的猜測是網絡正確計算第一行計算,然後總是在其他計算上輸出這個結果,不管我餵它(因爲它似乎在第一個訓練示例中表現得非常好,給出準確的預測)。
例如,我的第一堂訓練例如變量是:
1 1 13.5 13.5 13.5 14.5 14.4 14.3 14.3 14.2 14.5 13 11.7 12.2 12.2 11.3
我的目標輸出爲14.5,而在每個測試,網絡輸出14.69和14.7(之間的事情,由於小的計算時間,因爲我只玩包,我每次運行代碼時都會訓練它)。 因此,該輸出對於該組數據似乎完全合法。
事情是,當我嘗試在其他幾個輸入上運行它時,我總是得到相同的14.69/14.7(即使是最小的數字也是相同的輸出)。
由於網絡似乎正在正確處理訓練示例,在一個新的測試示例上正確學習關係並計算正確,我傾向於認爲所有訓練部分都是正確的。由於沒有理由網絡總是會輸出相同的值,我的猜測是我的測試方式不正確。
我的問題是:在新數據集上測試FANN神經網絡的確切語法是什麼?並且,如何打印/保存相應的輸出?
這裏是我的代碼的當前狀態:
fann_type *calc_out;
fann_type input[16];
for (int i = 0; i < 20; i++)
{
if (!rowHasNA(timeSerie, i))
{
cout << "Input : ";
for (int j = 1; j < 17; j++)
{
input[j - 1] = timeSerie(i, j);
cout << input[j - 1] << " ";
}
cout << endl;
calc_out = fann_run(ann, input);
cout << "Input " << i << " gives : " << calc_out[0] << endl;
}
}
其中:
rowHasNA
是我用來確定我的例子是否具有自定義函數至少一個NAann
是已經訓練過的fann*
timeSerie
是matrix<double>
其中每行都是一個測試示例
我對FANN軟件包的工作原理還是有點困惑,因爲我沒有發現關於如何訓練網絡和測試它們的真正清晰的文檔。我很難理解fann_type
是如何工作的。
預先感謝您。
在訓練和運行之前簡單地縮放功能 –