Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z biblioteką FANN - sztuczne sieci neuronowe

Ostatnio zmodyfikowano 2016-02-22 17:06
Autor Wiadomość
darek_145
Temat założony przez niniejszego użytkownika
Problem z biblioteką FANN - sztuczne sieci neuronowe
» 2016-02-17 18:23:16
Witam,
Czy ktoś z Was kiedyś próbował swoich sił z biblioteką FANN?
Próbuje nauczyć sieć rozpoznawać cyfry 0-9.

Korzystam przy tym z próbek cyfr znalezionych w sieci:
http://www.cs.nyu.edu/~roweis/data/mnist_test2.jpg

Mój plik treningowy wygląda następująco:


C/C++
1000 225 10
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 - 1 - 1 - 1 1 1 1 1 1 1 1 1 1 1 - 1 - 1 - 1 - 1 - 1 - 1 1 1 1 1 1 1 1 1 - 1 - 1 - 1 1 1 1 - 1 1 1 1 1 1 1 1 - 1 - 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 - 1 - 1 - 1 - 1 - 1 1 1 1 1 1 1 1 1 1 1 - 1 - 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1
 
1 - czarny piksel
-1 - biały piksel

Do nauki stosuje 1000 próbek po (100 na każdy znak), każda próbka to obraz 15x15 pikseli, czyli mamy 225 neuronów wejściowych oraz 10 wyjściowych.

Program do samej nauki wygląda następująco:


C/C++
#include <fann.h>


int main() {
    const unsigned int num_input = 15 * 15;
    const unsigned int num_output = 10;
    const unsigned int num_layers = 3;
    const unsigned int num_neurons_hidden = 350;
    const float desired_error =( const float ) 0.0005;
    const unsigned int max_epochs = 1000;
    const unsigned int epochs_between_reports = 1;
    const float learing_rate =( const float ) 0.005;
    struct fann * ann = fann_create_standard( num_layers, num_input, num_neurons_hidden, num_output );
    fann_set_activation_function_hidden( ann, FANN_SIGMOID_SYMMETRIC );
    fann_set_activation_function_output( ann, FANN_SIGMOID_SYMMETRIC );
    fann_set_learning_rate( ann, learing_rate );
    fann_train_on_file( ann, "train_file4.data", max_epochs, epochs_between_reports, desired_error );
    fann_save( ann, "digits_network5.net" );
    fann_destroy( ann );
   
    return 0;
}
 
Niestety w programie testowym na każdy obraz cyfrą dostaję następujący odpowiedź:

0: 4.83465e+033
1: -1.#QNAN
2: 4.83465e+033
3: -1.#QNAN
4: 4.83465e+033
5: -1.#QNAN
6: 4.83465e+033
7: -1.#QNAN
8: 4.83465e+033
9: -1.#QNAN

Czy ktoś może wie gdzie popełniam błąd ???


P-144960
michal11
» 2016-02-17 19:33:52
Dlaczego nie zastosujesz wersji c++ dla tej biblioteki ? Może będzie łatwiej.
P-144963
darek_145
Temat założony przez niniejszego użytkownika
» 2016-02-22 16:39:29
Problem nie był w tym czy stosowałem wersję C czy C++, ale  w tym, że przez przypadek zalinkowałem bibliotekę fanndouble i fannfloat jednocześnie :)

Tak czy siak, dostaje teraz lepsze wyniki, na plikach testowych ANN radzi sobie jako tako, ale z napisanymi ręcznie przeze mnie cyframi trochę gorzej.
P-145168
Gibas11
» 2016-02-22 16:48:21
Przydałoby się chyba trochę więcej próbek.

I tak nie ma co liczyć na cuda, ludzie mają problemy z czytaniem odręcznego pisma co po niektórych (czyt. mnie) a co dopiero program widzący w życiu 100 przykładów. ;)
P-145169
darek_145
Temat założony przez niniejszego użytkownika
» 2016-02-22 17:06:55
To akurat już zmieniłem, na każdą cyfrę dostaje 4900 próbek :)
P-145172
« 1 »
  Strona 1 z 1