Aproximace funkce

Síť typu Back-Propagation

Příprava trénovací množiny

Načtení vlastní knihovny pro práci s neuronovými sítěmi a dále pomocné funkce pro práci se seznamy (maticemi).

<< NeuralNetworks`;
<< Graphics`MultipleListPlot`;
<< LinearAlgebra`MatrixManipulation`;

Clear["Global`*"];

Vytvoření trénovací množiny - mohutnost této množiny je v proměnné "NData". Kompletní trénovací množina se skládá ze dvou seznamů. Seznam "x" obsahuje množinu vstupních dat neuronové sítě, seznam "y" pak množinu výstupních (správných/očekávaných) dat.

NData = 40;
\(\(x = 
        N[Table[{3  π\ i/NData}, 
	{i, 0, 
              NData - 1}]];\)\)
y = Sin[x];

\(\(ListPlot[AppendRows[x, y], 
	
        PlotStyle -> {PointSize[0.02]}];\)\)

Vytvoření a inicializace neuronové sítě
(typu Back-Propagation)

Vytvoření sítě

Funkce "InitializeFeedForwardNet" slouží k vytvoření vlastní neuronové sítě typu Back-Propagation.
Poznámka: Feed-Forward je pouze jiné označení pro sítě Back-Propagation. Zatímco u Back-Propagation, mluvíme o ZPĚTNÉM (Back) šíření CHYBY, tak u Feed-Forward máme na mysli DOPŘEDNÉ šíření SIGNÁLU.
Vytvářenou síť je možné ovlivnit nastavením různých parametrů funkce "InitializeFeedForward". V tomto konkrétním příkladě se vytvoří síť s pěti neurony ve skryté vrstvě, aktivační funkcí neuronů bude sigmoida a po vytvoření sítě dojde k její náhodné inicializaci (náhodné nastavení vah všech neuronů).

\(ff = 
      InitializeFeedForwardNet[
	x, 
        y, {5}, 
	
        RandomInitialization -> True, 
	
        Neuron -> Sigmoid]\)

Nyní je síť vytvořena a je přiřazena do proměnné "ff", prostřednictvím které lze dále se sítí pracovat.

Zobrazení informací o síti

NetInformation[ff]

Aktivační funkce neuronu

Sigmoid[φ]
\(\(Plot[Sigmoid[x], {x, \(-7\), 7}, 
	
        TextStyle -> {FontSize -> 9}, 
	
        PlotStyle -> {Thickness[0.01]}, 
        AspectRatio -> 1/2];\)\)

Práce s neuronovou sítí (učení a vybavování)

Odezva zatím nenaučené (náhodně inicializované) sítě, na vstupní množinu dat.

NetPlot[ff, x, y, 
        PlotStyle -> {PointSize[0.02], Thickness[0.01]}];

Učení

Učení sítě se provádí pomocí funkce "NeuralFit". Pomocí parametrů se zadá učená síť, trénovací množina a počet učících cyklů.

{ff2, frec} = NeuralFit[ff, x, y, 5];

Vybavování

Zobrazení odezvy naučené sítě

Plot[ff2[{x}], {x, -1, 15}, 
        PlotStyle -> {Thickness[0.01]}];

NetPlot[ff2, x, y, 
        PlotStyle -> {PointSize[0.02], Thickness[0.01]}];

NetPlot[ff2, x, y, DataFormat -> NetOutput];

Odezvy jednotlivých neuronů sítě

NetPlot[ff2, x, y, DataFormat -> HiddenNeurons, 
        PlotStyle -> {Hue[ .2], Hue[ .4], Hue[ .6]}, 
        PlotLegend -> 
          Map["Nr " <> ToString[#] &, 
            Range[Length[ff2[[1, 1, 1, 1]]]]]];

Průběh učení sítě

NetPlot[frec, x, y, Intervals -> 1, 
        DataFormat -> FunctionPlot, 
        PlotStyle -> {PointSize[0.02], Thickness[0.01]}];