| Metoda | Deklaracja metody | Przykład wywołania | Opis działania |
|---|---|---|---|
| Deklaracja sieci neuronowej | neural_net() | neural_net nn | Zadeklarowanie sieci neuronowej. W przykładzie sieć ma nazwę 'nn' |
| Tworzenie sieci o zadanej architekturze warstw | neural_net(int i,int h,int ha,int oa) | neural_net nn(1,2,logistic,linear) | Zadeklarowanie sieci neuronowej, posiadającej 'i' wejść, 'h' neuronów w warstwie ukrytej. Aktywacja warstwy ukrytej odbywa się za pomocą funkcji 'ha', a aktywacja warstwy wyjściowej za pomocą funkcji 'oa'. Numery i nazwy funkcji aktywacji: 0 – undefined (nieokreślona) 1 – logistic () 2 – tanhyp () 3 – linear ( ) W przykładzie powstaje sieć o jednym wejściu, 2 neuronach ukrytych. Funkcje aktywacji są typu 'logistic'. |
| Definiowanie wzorców (danych) | void set_patterns(const matrix &p_in,const matrix &p_out,int set=0) | nn.set_patterns(x,y,learn_set) | Definiowane są wzorce uczące: 'p_in' - wejściowe (zmienne objaśniające), 'p_out' – wyjściowe (zmienna objaśniana). Wybrać należy zbiór 'set': 0 – learn_set (zbiór uczący) 1 – valid_set (zbiór walidacyjny, pomocniczy przy uczeniu) 2 – test_set (niezależny zbiór testowy) W przykładzie definiowany jest zbiór uczący dla zmiennych x i zmiennej objaśnianej y. |
| Liczba wzorców | int patterns(int set=0) | nn.patterns(learn_set) | Liczba wzorców w danych zbiorze 'set'. |
| Informacja o danych | void datainfo() | nn.datainfo() | Zbiorcza informacja o danych: liczba wzorców we wszystkich zbiorach danych (0, 1 i 2) |
| Wybór funkcji aktywacji | void set_activ_fun(int ha=logistic,int oa=logistic) | nn.set_activ_fun(logistic,linear) | Wybierane są funkcje aktywacji dla warstwy ukrytej i wyjściowej. |
| Inicjalizacja | void init(double c=0.02) | nn.init() | Inicjalizacja połączeń przed rozpoczęciem uczenia. Parametr 'c' określa wielkość parametrów losowych. |
| Prosta inicjalizacja | void init_simply(double c=0.02) | nn.init_simply() | Prosta inicjalizacja połączeń przed rozpoczęciem uczenia. Inicjalizowane jest tylko po jednym połączeniu od każdego wejścia. Parametr 'c' określa wielkość parametrów losowych. |
| Inicjalizacja pojedynczego wejścia | void init_single_input(int v_in,int h,int pos=1,double c=0.02) | nn.init_single_input(10,5,1) | Inicjalizacja połączeń od danego wejścia. Wybiera się numer wejścia 'v_in', liczbę aktywowanych neuronów ukrytych 'h' i położenie w warstwie ukrytej 'pos'. Parametr 'c' określa wielkość parametrów losowych. W przykładzie inicjalizowane są połączenia od 10 wejścia do 1, 2, 3, 4 i 5 neuronu ukrytego. |
| Inicjalizacja do realizacji funkcji binarnej | void init_binfun(int v_in,int pos=1) | nn.init_binfun(10,15) | Inicjalizacja realizująca kodowanie binarne. Dotyczy tylko sieci aktywowanych za pomocą funkcji (tanhyp, linear) i zmiennej zero-jedynkowej na wybranym wejściu. 'v_in' to numer wejścia, 'pos' to pozycja wykorzystanego neuronu w warstwie ukrytej (wykorzystany jest 1 neuron). Połączenia są ustawiane na wartości realizujące kodowanie binarne (nie wymagają uczenia). W przykładzie inicjalizuje się połączenia dla zmiennej nr 10, biegnące do neuronu 15. |
| Inicjalizacja do realizacji kodowania ciągłego | void init_confun(int v_in,int pos=1) | nn.init_confun(10,15) | Inicjalizacja realizująca kodowanie ciągłe funkcją tanh4. Dotyczy tylko sieci aktywowanych za pomocą funkcji (tanhyp, linear) i zmiennej ciągłej na wybranym wejściu. 'v_in' to numer wejścia, 'pos' to pozycja wykorzystanego neuronu w warstwie ukrytej (wykorzystany jest 1 neuron). Połączenia są ustawiane na wartości realizujące kodowanie ciągłe tanh (wymagane jest uczenia). W przykładzie inicjalizuje się połączenia dla zmiennej nr 10, biegnące do neuronu 15. |
| Liczba warstw wejściowych | int size_in() | nn.size_in() | Zwraca liczbę neuronów wejściowych |
| Liczba warstw ukrytych | int size_hid() | nn.size_hid() | Zwraca liczbę neuronów ukrytych |
| Funkcja aktywująca warstwy ukryte | int act_hid() | nn.act_hid() | Zwraca numer funkcji aktywującej warstwę ukrytą: 0 – undefined 1 – logistic 2 – tanhyp 3 – linear |
| Funkcja aktywująca warstwę wyjściową | int act_out() | nn.act_out() | Zwraca numer funkcji aktywującej warstwę wyjściową: 0 – undefined 1 – logistic 2 – tanhyp 3 – linear |
| Struktura sieci | void structure() | nn.structure() | Wyświetla strukturę sieci: - layer size – liczba neuronów w warstwie wejściowej, ukrytej i wyjściowej - activation – funkcje aktywacji (wejście → ukryte, ukryte → wyjście) - parameters – liczbę niezerowych parametrów dla połączeń (wejście → ukryte, bias → ukryte, ukryte → wyjście, bias → wyjście) |
| Zmiana rozmiaru sieci | void resizec(int i_new,int h_new) | nn.resizec(10,5) | Zmiana liczby wejść z bieżącej na 'i_new' oraz liczby neuronów ukrytych z bieżącej na 'h_new'. Zachowywane są wartości połączeń. |
| Dodanie neuronu w warstwie ukrytej | void add_hid(int v_in,int pos,double c=0.02) | nn.add_hid(8,5) | Dodanie neuronu w warstwie ukrytej. Połączenie od wejścia 'v_in' do pozycji 'pos'. Parametr 'c' określa wielkość parametrów losowych. |
| Liczba używanych neuronów ukrytych | int used_hid() | nn.used_hid() | Zwraca liczbę używanych neuronów w warstwie ukrytej. Neuron jest używany, jeśli jest aktywowany przez wcześniejszą warstwę. |
| Przesunięcie neuronów w warstwie ukrytej | void shift_hid(int s) | nn.shift_hid(10) | Neurony w warstwie ukrytej są przesuwane o 's' pozycji. |
| Łączenie dwóch sieci | void merge(neural_net &n1,neural_net &n2,double c1=0.5,double c2=0.5,double c0=0.0) | nn.merge(n1,n2) | Łączenie sieci 'n1' i 'n2'. Otrzymana sieć daje wyniki będące kombinacją liniową składowych: value(x)=c1*n1.value(x)+c2*n2.value(x)+c0 |
| Dołączenie sieci do istniejącej sieci | void join(neural_net &n1,double c1=1.0) | nn.join(n1) | Dołączenie sieci 'n1' do bieżącej sieci. Po dołączeniu bieżąca sieć daje wyniki będące kombinacją liniową sieci przed dołączeniem i sieci dołączanej: value(x)=value(x)+c1*n1.value(x) |
| Przemnożenie wag drugiej warstwy przez stałą | void w2b2_mul(double c) | nn.w2b2_mul(2.0) | Połączenia od warstwy ukrytej do wyjściowej są mnożone przez stałą 'c'. Przykładowo, sieć będzie dawać wyniki 2 razy większe. |
| Dodanie wartości do biasu drugiej warstwy | void b2_plus(double c) | nn.b2_plus(8.5) | Bias warstwy wyjściowej jest zwiększany o stałą 'c'. Przykładowo, sieć będzie dawać wyniki zwiększone o 8.5. |
| Wypełnienie nieużywanych połączeń losowymi wartościami | void refill(double c) | nn.refill(0.02) | Nieużywane połączenia są inicjowane losowymi wartościami, o których wielkości decyduje stała 'c'. |
| Dodanie jednego połączenia w pierwszej warstwie | void rand_add_w1(double c) | nn.rand_add_w1(0.02) | Dodawane jest losowo połączenie w pierwszej warstwie |
| Dodanie jednego połączenia w drugiej warstwie | void rand_add_w2(double c) | nn.rand_add_w2(0.02) | Dodawane jest losowo połączenie w drugiej warstwie |
| Dodanie połączenia w obu warstwach | void rand_add_w2w1(double c) | nn.rand_add_w2w1(0.02) | Dodawane jest losowo połączenie w pierwszej i w drugiej warstwie |
| Usunięcie jednego połączenia w pierwszej warstwie | void rand_del_w1() | nn.rand_del_w1() | Usuwane jest losowo połączenie w pierwszej warstwie |
| Usunięcie jednego połączenia w drugiej warstwie | void rand_del_w2() | nn.rand_del_w2() | Usuwane jest losowo połączenie w drugiej warstwie |
| Redukcja połączeń sieci | void reduction(double c=0.02) | nn.reduction(0.01) | Połączenia sieci o wadze mniejszej co do wartości bezwzględnej od 'c' są zerowane |
| Aktywacja połączeń nieaktywnych | void rand_fill0(double c=0.02) | nn.rand_fill0(0.01) | Połączenia o wartości zero są aktywowane wartościami losowymi z zakresu [0,c] |
| Dopasowanie sieci do danych | int fit(int iter=100,int grad_desc=1,int lev_marq=1,int layer_1=1) | nn.fit() | Sieć jest dopasowywana do danych. Znajdowane jest minimum funkcji błędu dla prób bootstrapowych. Parametry funkcji: - iter – liczba iteracji (domyślnie 100) - grad_desc – metoda gradientu sprzężonego (domyślnie włączona) - lev_marq – metoda Levenberga-Marquardta (domyślnie włączona) - layer_1 – modyfikacja połączeń w pierwszej warstwie (domyślnie włączona) |
| Uczenie sieci | int learn(int min_iter=100,int max_iter=1000,int slow_steps=10,double tol_err=1e-8,int grad_desc=1,int lev_marq=1,int layer_1=1,int regul=1) | nn.learn() | Sieć jest uczona. W wyniku otrzymywany jest model o właściwościach generalizujących. Parametry funkcji: - min_iter – minimalna liczba iteracji (domyślnie 100) - max_iter – maksymalna liczba iteracji (domyślnie 1000) - slow_steps – liczba wolnych kroków, po których uczenie zostaje przerwane (domyślnie 10) - tol_err – dokładność uczenia (domyślnie 1e-8) - grad_desc – metoda gradientu sprzężonego (domyślnie włączona) - lev_marq – metoda Levenberga-Marquardta (domyślnie włączona) - layer_1 – modyfikacja połączeń w pierwszej warstwie (domyślnie włączona) - regul – czy ma być zastosowana regularyzacja (domyślnie tak) |
| Uczenie z równoczesną walidacją | int learn_and_valid(int min_iter=100,int max_iter=1000,int slow_steps=10,double tol_err=1e-8,int grad_desc=1,int lev_marq=1,int layer_1=1) | nn.learn_and_valid() | Sieć jest uczona i jednocześnie walidowana. W wyniku otrzymywany jest model o właściwościach generalizujących. Parametry funkcji są analogiczne jak dla 'learn', z tym że nie ma parametru regularyzacji. (Metoda niepolecana, ponieważ walidacja niedostatecznie zabezpiecza przed przeuczeniem.) |
| Resetowanie procesu uczenia | void reset() | nn.reset() | Proces uczenia jest resetowany |
| Błąd dopasowania | double error(int set=0) | nn.error(0) | Zwraca błąd dopasowania dla zbioru o numerze 'set' |
| Korelacja wartości obserwowanych i predykowanych | double corr(int set=0) | nn.corr(0) | Zwraca wartość korelacji wartości obserwowanych i predykowanych dla zbioru o numerze 'set' |
| Skuteczność predykcji | double AR(int set=0) | nn.AR(0) | Zwraca wskaźnik AR dla zbioru o numerze 'set' |
| Wartość predykcji | double value(const sparse &x) | nn.value(x) | Zwraca wartość predykcji sieci dla wejścia 'x' |
| Wartość predykcji dla wzorców | matrix values(int set=0) | nn.values(0) | Zwraca zestaw wartości predykcji sieci dla zbioru wzorców o numerze 'set' |
| Zapis sieci | void save(Text name) | nn.save("siec.txt") | Zapis sieci do pliku o nazwie 'name' |
| Wczytanie sieci | void load(Text name) | nn.load("siec.txt") | Wczytanie sieci z pliku o nazwie 'name' |
| Wczytanie struktury sieci | void load_structure(Text name) | nn.load_structure("siec.txt") | Wczytanie struktury sieci z pliku o nazwie 'name'. Połączenia są inicjowane losowymi wartościami. |
| Skasowanie sieci | void free() | nn.free() | Skasowanie sieci. Zwalniana jest pamięć przydzielona na ten obiekt. |
