Autor Wątek: [Java/C++] Sieci neuronowe  (Przeczytany 9562 razy)

Offline programistagd

  • Użytkownik
    • WeHaveIdea

# Styczeń 09, 2011, 19:17:43
Witam!
Chcę nauczyć się programowania sztucznych sieci neuronowych.
Szukam jakichś naprawdę prostych bibliotek(w użyciu i instalacji) do C++ lub Javy.
Najlepiej, by były do nich jakieś tutoriale lub przykłady(przykładowa sieć neuronowa itp.)
Z góry dziękuję za odpowiedzi.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Buyuk

  • Użytkownik
    • Mój blog ;]

# Styczeń 09, 2011, 19:47:45
Co na szybko udało mi się wyszperać, to godnymi uwagi jest FANN albo OpenCV.
Aczkolwiek jeżeli chcesz się nauczyć programować sieci neuronowe, to po co ci do tego jakaś biblioteka ?

EDIT:
Kursów co prawda nie znam, acz przypuszczam że jakieś istnieją, ale za to jest dostępnych kilka książek traktujących o tym temacie. Rozważyłbym kupno takiej na twoim miejscu.
« Ostatnia zmiana: Styczeń 09, 2011, 21:40:08 wysłana przez Buyuk »

Offline programistagd

  • Użytkownik
    • WeHaveIdea

# Styczeń 09, 2011, 19:51:13
Bardziej chcę nauczyć się je programować od strony - jak zrobić sieć robiącą to i tamto niż jak zaimplementować BackPropagation i Neuron.
Choć w sumie jak ktoś zna jakiś kurs z przykładami do Javy lub C++ to też byłbym wdzięczny.

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 09, 2011, 21:13:52
A może sam sobie coś takiego napisz. Dzięki temu lepiej będziesz rozumiał jak to działa.

Offline Mic

  • Użytkownik

# Styczeń 09, 2011, 23:54:34
Używałem kiedyś biblioteki FANN, myślę, że spokojnie można ją polecić.
A co do kursów/literatury - Klasyka to oczywiście książki Tadeusiewicza, dla początkujący powinni zacząć od dzieła "Sieci neuronowe w c#" później koniecznie należy sięgnąć po inne pozycje żeby zrozumieć matematykę która stoi za sieciami.
A z kursów pamiętam ze dwa polskojęzyczne jeden to przetłumaczony tutorial do FANN wraz z przykładami wykorzystania sieci, a drugi to jakaś strona poświęcona teorii sieci, ale adresu już nie pomnę.

Cytuj
Aczkolwiek jeżeli chcesz się nauczyć programować sieci neuronowe, to po co ci do tego jakaś biblioteka ?
Dogłębna znajomość np. algorytmu backpropagation nie jest konieczna żeby wykorzystywać sieci neuronowe w prostych projektach.

A OpenCV to biblioteka służąca do przetwarzania obrazów, jeżeli w projekcie nie przetwarzasz obrazów to raczej nie ma sensu zaprzęgać kobyły.

Offline programistagd

  • Użytkownik
    • WeHaveIdea

# Styczeń 10, 2011, 20:52:37
Spróbuję sam coś napisać(najpierw jeden neuron albo tylko równoległe).
Mam prośbę, mógłby mi ktoś podać jakiś pseudokod na propagację wsteczną.
I do tego FANNa tutorial chętnie przeczytam, ale nie mogę znaleźć(może być po angielsku).

Offline counterClockWise

  • Użytkownik

# Styczeń 10, 2011, 22:33:41
Spróbuję sam coś napisać(najpierw jeden neuron albo tylko równoległe).
Mam prośbę, mógłby mi ktoś podać jakiś pseudokod na propagację wsteczną.
I do tego FANNa tutorial chętnie przeczytam, ale nie mogę znaleźć(może być po angielsku).

Jeden neuron to nie jest dobry pomysł, bo ani go specjalnie nie nauczysz ani siebie zasady działania. To trochę za mało, bo to tylko proste przecięcie przestrzeni jedną hiperpłaszczyzną. Albo na lewo albo na prawo.

Tutaj jest artykuł jeśli masz odpowiednie podstawy z jęz. angielskiego i matematyki:
http://www.learnartificialneuralnetworks.com/backpropagation.html

Propagacja wsteczna to tzw. uczenie z nauczycielem (pod nadzorem). Nauczyciel wie jaki jest oczekiwany wynik dla danych uczących. Podajemy kolejne dane, liczymy błąd i propagujemy go wstecz aby zmodyfikować wagi neuronów w sposób minimalizujący ten błąd.

Cytuj
Bardziej chcę nauczyć się je programować od strony - jak zrobić sieć robiącą to i tamto niż jak zaimplementować BackPropagation i Neuron.
Choć w sumie jak ktoś zna jakiś kurs z przykładami do Javy lub C++ to też byłbym wdzięczny.

Czyli raczej chcesz nauczyć się projektować sieci i poznać do czego służą niż zacząć od implementacji. Słusznie - poczytaj sobie najpierw jakie są rodzaje sieci, rodzaje uczenia i do czego dobrze się stosują.

Offline Mic

  • Użytkownik

# Styczeń 11, 2011, 02:56:26
I do tego FANNa tutorial chętnie przeczytam, ale nie mogę znaleźć(może być po angielsku).[/quote]

http://leenissen.dk/fann/html/files2/gettingstarted-txt.html
http://sonar-psi.googlecode.com/files/fann_pl.pdf

Offline programistagd

  • Użytkownik
    • WeHaveIdea

# Styczeń 11, 2011, 21:41:55
Cytuj
I do tego FANNa tutorial chętnie przeczytam, ale nie mogę znaleźć(może być po angielsku).

http://leenissen.dk/fann/html/files2/gettingstarted-txt.html
http://sonar-psi.googlecode.com/files/fann_pl.pdf

Te strony już widziałem(artykuł czytałem w angielskiej wersji).
Moim problemem jest to, że nie mogę zainstalować FANNa.
Próbuję to zrobić pod C++. Kompiluję w MSVC i wyskakuje ponad 500 błędów.
Kiedy linkuję liba to jest błąd w linkowaniu, a jak dodaję źródła do projektu to też są błędy.
Z samymi nagłówkami i DLLem tez nie działa.
Jak to zrobić?(Używam C::B z MinGW)

Offline Mic

  • Użytkownik

# Styczeń 11, 2011, 22:04:57
przydałoby się chociaż kilka z tych błędów, wklej klika z mingw

Offline programistagd

  • Użytkownik
    • WeHaveIdea

# Styczeń 11, 2011, 22:28:34
Przy kompilacji ze źródła(MinGW)+testowy program:
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_print_connections_raw':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|33|error: structure has no member named `total_connections_allocated'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|39|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_cascadetrain_on_data':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|58|error: structure has no member named `callback'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|66|warning: implicit declaration of function `fann_train_outputs'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|68|warning: implicit declaration of function `fann_desired_error_reached'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|75|error: structure has no member named `callback'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|79|error: structure has no member named `num_bit_fail'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|83|error: structure has no member named `activation_steepness'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|84|error: `FANN_ACTIVATIONFUNC_NAMES' undeclared (first use in this function)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|84|error: (Each undeclared identifier is reported only once|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|84|error: for each function it appears in.)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|84|error: structure has no member named `activation_function'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|88|error: structure has no member named `callback'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|99|warning: implicit declaration of function `fann_initialize_candidates'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|106|warning: implicit declaration of function `fann_train_candidates'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|109|warning: implicit declaration of function `fann_install_candidate'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|115|error: structure has no member named `callback'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|125|warning: implicit declaration of function `fann_set_shortcut_connections'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_cascadetrain_on_file':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|133|warning: passing arg 1 of `fann_read_train_from_file' discards qualifiers from pointer target type|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|144|error: conflicting types for 'fann_train_outputs'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|144|note: an argument type that has a default promotion can't match an empty parameter name list declaration|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|66|error: previous implicit declaration of 'fann_train_outputs' was here|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_train_outputs':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|149|error: structure has no member named `cascade_max_out_epochs'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|156|warning: implicit declaration of function `fann_train_outputs_epoch'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|184|error: structure has no member named `cascade_output_change_fraction'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|185|error: structure has no member named `cascade_output_change_fraction'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|186|error: structure has no member named `cascade_output_stagnation_epochs'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|200|error: conflicting types for 'fann_train_outputs_epoch'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|156|error: previous implicit declaration of 'fann_train_outputs_epoch' was here|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_train_outputs_epoch':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|209|error: too many arguments to function `fann_update_slopes_batch'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|215|error: structure has no member named `first_con'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|216|error: too many arguments to function `fann_update_weights_irpropm'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|220|error: structure has no member named `first_con'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|221|error: too many arguments to function `fann_update_weights_quickprop'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|225|error: `FANN_E_CANT_USE_TRAIN_ALG' undeclared (first use in this function)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_reallocate_connections':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|240|error: structure has no member named `connections'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|241|warning: implicit declaration of function `realloc'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|241|error: structure has no member named `connections'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|243|error: structure has no member named `connections'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|245|error: `FANN_E_CANT_ALLOCATE_MEM' undeclared (first use in this function)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|249|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|249|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|250|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|279|error: structure has no member named `total_connections_allocated'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_reallocate_neurons':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|294|error: structure has no member named `total_neurons_allocated'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|298|error: `FANN_E_CANT_ALLOCATE_MEM' undeclared (first use in this function)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `initialize_candidate_weights':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|338|error: structure has no member named `rprop_delta_zero'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|345|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|345|warning: implicit declaration of function `rand'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|345|error: `RAND_MAX' undeclared (first use in this function)|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|347|error: structure has no member named `weights'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c||In function `fann_initialize_candidates':|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|363|warning: implicit declaration of function `fann_get_cascade_num_candidates'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|382|error: structure has no member named `total_neurons_allocated'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|399|error: structure has no member named `total_connections_allocated'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|431|error: structure has no member named `cascade_activation_functions_count'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|433|error: structure has no member named `cascade_activation_steepnesses_count'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|435|error: structure has no member named `cascade_num_candidate_groups'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|441|error: structure has no member named `sum'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|443|error: structure has no member named `activation_function'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|444|error: structure has no member named `cascade_activation_functions'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|445|error: structure has no member named `activation_steepness'|
E:\projekty\Nuerony+GSMama\FANNNeuro\fann_cascade.c|446|error: structure has no member named `cascade_activation_steepnesses'|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 11 warnings ===|
Program testowy:
#include <stdio.h>

#include "floatfann.h"

int print_callback(unsigned int epochs, float error)
{
printf("Epochs     %8d. Current MSE-Error: %.10f\n", epochs, error);
return 0;
}

int main()
{
const float connection_rate = 1;
const float learning_rate = (const float)0.7;
const unsigned int num_layers = 3;
const unsigned int num_neurons_hidden = 96;
const float desired_error = (const float)0.001;
struct fann *ann;
struct fann_train_data *train_data, *test_data;

unsigned int i = 0;

printf("Creating network.\n");

train_data = fann_read_train_from_file("../benchmarks/datasets/robot.train");

ann = fann_create(connection_rate, learning_rate, num_layers,
train_data->num_input,
num_neurons_hidden,
train_data->num_output);

printf("Training network.\n");

fann_set_training_algorithm(ann, FANN_TRAIN_INCREMENTAL);

fann_train_on_data(ann, train_data, 1000, 10, desired_error);

/*fann_train_on_data_callback(ann, data, max_iterations, iterations_between_reports, desired_error, print_callback);*/
printf("Testing network.\n");

test_data = fann_read_train_from_file("../benchmarks/datasets/robot.test");

fann_reset_MSE(ann);
for(i = 0; i < test_data->num_data; i++){
fann_test(ann, test_data->input[i], test_data->output[i]);
}
printf("MSE error on test data: %f\n", fann_get_MSE(ann));

printf("Saving network.\n");

fann_save(ann, "robot_float.net");

printf("Cleaning up.\n");
fann_destroy_train(train_data);
fann_destroy_train(test_data);
fann_destroy(ann);

return 0;
}

Błąd przy kompilacji linkujacej liba:
Cytuj
ld.exe||cannot find -lfannfloat.lib|
||=== Build finished: 1 errors, 0 warnings ===|
Czyli tego liba nie trzeba linkować ale bez niego są jeszcze inne błędy.
Jak coś to DLL i wszystkie pliki(src+1lib) są w folderze.

Offline Xirdus

  • Redaktor

# Styczeń 11, 2011, 22:31:38
Na liście dodatkowych libów wpisuj nazwy bez -l.

Offline Kos

  • Użytkownik
    • kos.gd

# Styczeń 12, 2011, 01:19:42
Jak to bez -l? Raczej bez .lib. :)

Offline Xirdus

  • Redaktor

# Styczeń 12, 2011, 17:50:30
Bez -l. OP prawdopodobnie ma w opcjach linkera nazwę z -l, przez co cb generuje parametr -l-lfannfloat.lib, i stąd błąd.

Offline Kos

  • Użytkownik
    • kos.gd

# Styczeń 12, 2011, 18:16:50
Nie, error wskazuje na co innego.

Jeśli w command line jest -lfoobar, to sprawdza w ścieżkach kilka nazw, między innymi libfoobar.a, foobar.lib i chyba foobar.dll (nie wiem, jak dokładnie reaguje na podanie mu DLL-ki, ale coś było)... pewnie jakieś jeszcze. Jeśli nie znajdzie niczego, to generuje po prostu błąd, że cannot find -lfoobar.