# neural_net

### Funkce:

Vrstevnatá perceptronová neuronová síť s adaptačním algoritmem Back-Propagation. Umožňuje adaptaci sítě v průběhu její aktivní činnosti, změnu parametrů adaptace pomocí kanálů a změnu topologie sítě v průběhu učení příp. aktivní činnosti. Trénovací množina může být modifikována kdykoliv během činnosti sítě.

### Syntax:

      neural_net neural_network_name;
        rem = string;
        bubble = string;
        timer = timer_name;
        owner = owner_name;
        position = integer, integer;
        win_disable = [ identifier, . . . ];
        win_title = string;
        net_file = file_name;
        train_file = file_name;
        mode = real_expression;
        error_value = real_dataelement;
        iterations = real_expression;
        learn_rate = real_expression;
        momentum = real_expression;
        use_momentum = boolean_expression;
        linear_output = boolean_expression;
        save_net = boolean_expression;
        save_net_file = string;
        save_train = boolean_expression;
        save_train_file = string;
        input_item
          expression = real_expression;
        end_input_item;
        output_item
          expression = real_dataelement;
        end_output_item;
        expected_output_item
          expression = real_expression;
        end_expected_output_item;
        save_status = boolean_expression;
        use_fi = boolean_expression;
        struct = cardinal, cardinal, ...;
        wmin = real;
        wmax = real;
        s = real;
      end_neural_net;

### Specifické parametry přístroje:

- net_file
  Název souboru s neuronovou sítí. Soubor je vyhledáván v aktuálním adresáři případně podle redirect souboru. Není-li zadán tento soubor, musí být zadána struktura sítě, tj. musí být naplněn parametr struct. Jestliže je zadána struktura a neodpovídá souboru, je vygenerována nová síť a uložena.
- train_file
  Název souboru s trénovací množinou. Není-li zadán, je trénovací množina prázdná.
- mode
  Mód činnosti sítě. Jsou povoleny následující hodnoty:
    0 - Adaptace sítě na aktuální trénovací množinu
    1 - Aktivní činnost sítě - síť reaguje na vstupy podle aktuálního rozložení vah
    2 - Aktivní činnost/adaptace - síť se učí a pracuje současně
- error_value
  Obsahuje datový element na na který se bude posílat hodnota váhové chybové funkce (tato funkce bývá v literatuře označována jako Ew).
- iterations
  Počet iteračních adaptačních cyklů, které se provedou v jednom časovém kroku. Má význam pouze v módech 0 a 2.
- learn_rate
  Hodnota koeficientu učení pro adapteci sítě. Hodnota musí být kladná, blízká 0. Zpravidla se volí hodnoty 0.1 .. 0.4. V případě nevhodné volby tohoto parametru (v součinnosti s parametrem momentum) je možné rozkmitání chybové funkce a může dojít i ke zhroucení systému vlivem přetečení rozsahu reálných čísel
- momentum
  Tento parametr má oproti learn_rate inhibiční parametr, tj. působí proti rozkmitání soustavy. Jeho hodnota je opět kladná, blízká 0. Vhodné nastavení těchto dvou parametrů má rozhodující vliv na rychlost učení neuronové sítě a může vést i k divergenci adaptačního procesu (v případě nevhodné volby). Vhodná volba parametrů není matematicky popsatelná a je záležitostí zkušeností. Oba parametry je možno měnit v průběhu adaptace - tím je možno vytvořit modifikované algoritmy Back-Propagation dle potřeb uživatele.
- use_momentum
  Používat/nepoužívat momentum.
- linear_output
  Určuje tvar přenosové funkce výstupních neuronů:
    FALSE - sigmoida - rozsah výstupních veličin v intervalu (0,1)
    TRUE - lineární funkce y=x - libovolný rozsah výstupních veličin
- save_net
  Uložit aktuální stav sítě do souboru podle obsahu kanálu save_net_file. Je-li tento kanál prázdný, je aktuální stav sítě uložen do souboru, ze kterého byl načten při inicializaci.
- save_net_file
  Název souboru pro uložení aktuálního stavu sítě.
- save_train
  Uložit aktuální trénovací množinu do souboru podle obsahu kanálu save_train_file. Je-li tento kanál prázdný, je trénovací množina uložena do souboru, ze kterého byla načtena při inicializaci.
- save_train_file
  Název souboru pro uložení aktuální trénovací množiny.
- input_item a end_input_item
  Je blok, ve kterém je možno parametrem expression zadat vstupní datový element do sítě. Je-li potřeba použít více vstupních neuronů, je nutné použít tento blok víckrát za sebou.
- output_item a end_output_item
  Je blok, ve kterém je možno parametrem expression zadat výstupní datový element z neuronové sítě. Je-li potřeba použít více výstupních neuronů, je nutné použít tento blok víckrát za sebou.
- expected_output_item a end_expected_output_item
  Je blok, ve kterém je možno parametrem expression zadat vstupní datový element pro zadávání požadovaných výstupních hodnot při přidávání nových položek do trénovací množiny.
- save_status
  Uloži aktuální obsah vstupních kanálů a požadovaných hodnot (tj. input_item a want_out_item). jako poslední položku do aktuální trénovací množiny.
- use_fi
  Používat/nepoužívat prahovou hodnotu neuronů. Je-li používána, její hodnota je 1.0.
- struct
  Zadává strukturu sítě. Každá položka představuje počet neuronů v jedné vrstvě. První položka představuje vstupní vrstvu, poslední položka představuje výstupní vrstvu.
- wmin
  Minimální hodnota při pseudonáhodné volbě vah při inicializaci sítě.
- wmax
  Maximální hodnota při pseudonáhodné volbě vah při inicializaci sítě.
- s
  Hodnota strmosti sigmoidální funkce při inicializaci sítě.

### Příklad:

Příklad nastavení parametrů přístroje neural_net:

      neural_net SIT1;
        timer = seq_1, 1;
        owner = panel_1;
        position = 100, 100;
        net_file = 'neural1.net';
        train_file = 'train1.trs';
        mode = a;
        error_value = b;
        iterations = 10;
        learn_rate = lrate;
        end_function = endf;
        save_net = bool;
        save_net_file = strng;
        save_train = bool2;
        save_train_file = strng2;
        input_item
          expression = i1;
        end_input_item;
        input_item
          expression = i2;
        end_input_item;
        input_item
          expression = i3;
        end_input_item;
        output_item
          expression = o1;
        end_output_item;
        struct = 3, 5, 1;
      end_neural_net;

### Nativní procedury přístroje

    Show()

Zobrazení skrytého přístroje.

    Hide()

Skrytí zobrazeného přístroje.

    GetNumOfNeurons( &NumOfNeurons : real )

Vrátí počet neuronů v celé síti (včetně vstupních a výstupních)

    GetNumOfNeurons( Layer : real, &NumOfNeurons : real )

Vrátí počet neuronů ve vrstvě specifikované parametrem Layer.

    GetNumOfLayers( &NumOfLayers : real )

Vrátí počet vrstev v síti.

    AddNeurons()

Jestliže je to možné, přidá po jednom neuronu do každé vnitřní vrstvy neuronové sítě.

    DelNeurons()

Jestliže je to možné, ubere neuron z každé vnitřní vrstvy neuronové sítě.

    DelLastTrainElem()

Vymaže poslední položku z trénovací množiny.

    DelFirstTrainElem()

Vymaže první položku z trénovací množiny.

    GetNumOfTrainElems( &NOfElems : real )

Vrátí počet položek v trénovací množině.

    GetRunning( &IsRunning : boolean )

Vrátí stav sítě:

  TRUE - přístroj funguje normálně
  FALSE - došlo k matematickému zhroucení sítě (vlivem nesprávné adaptace) - je nutno zastavit aplikaci a znovu provést adaptaci s jinými parametry příp. s vhodnější trénovací množinou. Toto opatření je zavedeno pro zabránění zhroucení systému.

### Událostní procedury přístroje

Přístroj může volat standardní událostní procedury:

    OnActivate()

Podrobnější informace k těmto procedurám lze nalézt v kapitole Programování a procedury.