2012-03-08 14 views
2

私はFANNライブラリを実験していますが、これはニューラルネットワークの優れたライブラリであると思われ、使用方法に問題があります。FANNライブラリの使用

私がここでやろうとしていることは、ニューラルネットワークを訓練することです。これは、図書館をいじったり、入力を与えたり、出力を期待したりするためです。ここで

FANN::neural_net nn; 
const float desired_error = 0.00001; 
const unsigned int max_epochs = 500000; 
const unsigned int epochs_between_reports = 1000; 
const unsigned int layers_count = 3; 
const unsigned int layers[layers_count] = {7, 5, 1}; 
nn.create_standard_array(layers_count, layers); 
nn.train_on_file(TRAINING_DATA, max_epochs, epochs_between_reports, desired_error); 

私のトレーニングデータファイル(TRAINING_DATA)の最初の行です:

16969 7 1 
0.0812069 0.0812069 0.381578 0.0812069 5.8931e-05 0.0843302 0.606695 
1 
0.429961 0.0509753 0.381578 0.0266957 0.000117862 0.00707172 0.0221581 
1 
0.0983558 0.486888 0.381578 0.000117862 0.0266957 0.00701279 0.0539808 
1 
0.0983558 0.486888 0.598562 0.0161471 0.0161471 0.000471448 0.00135541 
1 

完全データセットは、訓練データファイルからのサンプルデータを使用してhere

を見つけることができます、私はそれを一致させる出力を取得する必要があります、右か?しかし、私が次のことをすれば、出力として0が得られます。

fann_type i[7], *o; 
i[0] = 0.429961; i[1] = 0.0509753; i[2] = 0.381578; i[3] = 0.0266957; i[4] = 0.000117862; i[5] = 0.00707172; i[6] = 0.0221581; 
o = nn.run(i); 
std::cout << "output (run) is " << o[0] << std::endl; 

実際に何が起こっているのですか?

私はfannの2.2.0バージョンを使用します。

編集あなた

をありがとう:2.2.0バージョン2.1.0のベータ版が期待される結果が得られているようですが、ありません。

編集2:これは実際に私が使用していたバージョンのバグでした。

+0

あなたは16969の訓練例を持っているので、あなたは、MSEを持っている(平均二乗誤差)<0.00001とは、すべてが正しく予測されるわけではありません。あなたのネットワークは希望のエラーにまで達していますか? – alfa

+0

はい。実際にはかなり速い。 – ALOToverflow

+0

他の入力をテストしましたか? – alfa

答えて

1

エラーを再現しようとしましたが、できませんでした。ここに私のプログラムは次のとおりです。

#include<iostream> 
using namespace std; 
#include <fann.h> 
#include <fann_cpp.h> 
#include <floatfann.h> 
int main() 
{ 
    FANN::neural_net nn; 
    const float desired_error = 0.00001; 
    const unsigned int max_epochs = 500000; 
    const unsigned int epochs_between_reports = 1000; 
    const unsigned int layers_count = 3; 
    const unsigned int layers[layers_count] = {7, 5, 1}; 
    nn.create_standard_array(layers_count, layers); 
    nn.train_on_file("test.train", max_epochs, epochs_between_reports, desired_error); 

    fann_type i[7]; 
    i[0] = 0.429961; i[1] = 0.0509753; i[2] = 0.381578; i[3] = 0.0266957; i[4] = 0.000117862; i[5] = 0.00707172; i[6] = 0.0221581; 
    fann_type *o = nn.run(i); 
    std::cout << "output (run) is " << o[0] << std::endl; 

    return 0; 
} 

これが出力されます。

Max epochs 500000. Desired error: 0.0000100000. 
Epochs   1. Current error: 0.2283857614. Bit fail 4. 
Epochs   7. Current error: 0.0000000000. Bit fail 0. 
output (run) is 1 

たぶん、あなたはあなたの完全なトレーニングセットを提供することができますか?

+0

私は "test.train"に質問と一緒に投稿したデータセットのサンプルが入っていると思いますか? – ALOToverflow

+0

はい、私はこの比較には不十分かもしれないと思います。 – alfa

+0

これは完全に異なるデータファイルです。これはfann形式ではありません。 – alfa

0

私は入力と出力の両方が元々設定したものとは異なる値になっているという問題がありました。これは、私が期待していた範囲とは異なる範囲の活性化機能を使用することにまで煮詰まった。私はここで、この問題についての投稿:

http://leenissen.dk/fann/forum/viewtopic.php?f=1&t=1827

をデフォルトの活性化機能は、範囲[0、1]であるFANN_SIGMOID_STEPWISEです。すべてのデータが0と1の間にあるように見えるので、これはあなたの問題です。

データファイルをfannデータ構造にロードしてから、get_input()とget_output()が期待するものを確認するのに役立つかもしれません。

幸運

(あなたは何が起こっていたか見つけた場合は、後世のためにそれをここに投稿してください)

+0

問題は彼のFANNライブラリのバージョンでのみ発生し、バグのようです。 – alfa

関連する問題