0

FANN ライブラリを使用してニューラル ネットワークを構築し、回帰問題を進めています。問題は、ネットワークが関連するトレーニング セット (非常にうまく機能しているように見える) でトレーニングされると、すべてのテストがまったく同じ出力を出力することです。言い換えれば、16 個の予測変数がどのような状態であっても、ANN による予測出力は同じです。

私の推測では、ネットワークは計算の最初の行を正しく計算しており、何をフィードしても、常にこの結果を他の計算に出力していると思います (最初のトレーニング例では非常にうまく機能しているように見え、正確な予測が得られます)。 )。

たとえば、私の最初のトレーニング例の変数は次のとおりです。

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 (最小桁でも同じ出力) が得られることです。

ネットワークはトレーニング例を正しく処理しているように見え、関係を学習し、1 つの新しいテスト例で正しく計算しているように見えるので、私はすべてのトレーニング部分が正しいと信じる傾向があります。ネットワークが常に同じ値を出力する理由はないので、私のテスト方法は正しくないと思います。

私の質問は、新しいデータセットで 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私の例に少なくとも1つのNAがあるかどうかを判断するために使用したカスタム関数です
  • annfann*すでに訓練されている
  • timeSeriematrix<double>各行はテスト例です

ネットワークのトレーニング方法とテスト方法に関する明確なドキュメントが見つからないため、FANN パッケージの動作についてはまだ少し混乱しています。仕組みを理解するのに苦労していfann_typeます。

前もって感謝します。

4

1 に答える 1