Skip to content
/ ssn_lab_03 Public template

Zadanie z laboratorium Sztuczne Sieci Neuronowe

Notifications You must be signed in to change notification settings

IS-UMK/ssn_lab_03

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSN. Lab. 3. Sieć MLP

Zapoznaj się z zawartością notatnika Jupyter umieszczonego w repozytorium i wykonaj zawarte w nim ćwiczenia.

Notatnik: 03_mlp_softmax.ipynb Open In Colab Binder


Zad. 3. MLP

Zaimplementuj sieć MLP z jedną warstwą ukrytą przeznaczoną do klasyfikacji wieloklasowej ($c$ klas) uczoną za pomocą wstecznej propagacji.
Sieć działa dla danych o specyfikacji:

  • $X$ zbiór treningowy (macierz $n \times d$), $n$ przypadków opisanych $d$ zmiennymi posiadającycmi wyłacznie wartości numeryczne
  • $\mathbf{y} \in [0, 1, 2, \ldots, c-1 ]$ wektor etykiet klas (wartości całkowite)

Sieć uczona jest zgodnie z poniższym algorytmem realizowanym przez metodę fit(X, y), której implementację znajdziesz w pliku MLPClassifier.py. Zaimplementuj brakujące metody init(), feedforward(), backprop(), update(), predict() tak aby zrealizować uczenie oraz predykcję modelu.

Algorytm uczenia
Parametry początkowe (ustawiane w konstruktorze):

  • $N$ lość epok
  • $k$ ilość neuronów w warstwie ukrytej
  • $\eta$ krok uczenia
  1. Zamień etykiety $y$ do postaci wektora one-hot $\mathbf{y}_{onehot}$
  2. Zainicjuj macierze wag i wektory wyrazów wolnych (metoda init(X, y))
    warstwa ukryta: $\mathbf{W}_1$ (wymiary $k \times d$), , $\mathbf{b}_1$ (wymiary $k \times 1$)
    warstwa wyjściowa: $\mathbf{W}_2$ (wymiary $c \times k$),, $\mathbf{b}_2$ (wymiary $c \times 1$)
  3. Powtarzaj $n$ razy:
    • Dla każdego $\mathbf{x}$ ze zbioru treningowego wykonaj
      • propagacja sygnału (metoda forward(x))
        $\mathbf{h}_1 = \sigma \left(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1\right)$
        $\mathbf{h}_2 = \mathop{\text{softmax}} \left(\mathbf{W}_2 \mathbf{h}_1 + \mathbf{b}_2\right)$
        gdzie $\sigma$ funkcja aktywacji warstwy ukrytej $\sigma(x)=\frac{1}{1+e^{-x}}$
      • oblicz sygnał błędu (metoda backward(y))
        $\boldsymbol{\delta}_2 = \mathbf{y}_{onehot} - \mathbf{h}_2$
        $\boldsymbol{\delta}_1 = \sigma' \circ \boldsymbol{\delta}_2 \, \mathbf{W}_2$
        gdzie $\sigma'$ to pochodna funkcji aktywacji $\sigma^{\prime}(x)=\sigma(x)(1-\sigma(x))$, iloczyn $\mathbf{a}\circ \mathbf{b}$ jest wykonywany po współżędnych
      • aktualizacja wag (metoda update(x))
        $\mathbf{W}_1 \leftarrow \mathbf{W}_1 + \eta \, \boldsymbol{\delta}_1 \cdot \mathbf{x}^T$
        $\mathbf{b}_1 \leftarrow \mathbf{b}_1 + \eta \, \boldsymbol{\delta}_1$
        $\mathbf{W}_2 \leftarrow \mathbf{W}_2 + \eta \, \boldsymbol{\delta}_2 \cdot \mathbf{h}_1^T$
        $\mathbf{b}_2 \leftarrow \mathbf{b}_2 + \eta \, \boldsymbol{\delta}_2$
        iloczyn $\mathbf{a}\cdot \mathbf{b}^T$ oznacza iloczyn zewnętrzny
    • na koniec epoki oblicz i zachowaj wartość funkcji kosztu entropii krzyżowej $J$ oraz poprawność klasyfikacji
    $$J = -\sum_{i=1}^{n}\mathbf{y}_{i} \log{f(\mathbf{x}_i})$$

Podziel zbiór danych digits na część treningową i testową w proporcji 50%/50%. Wykonaj trening na zbiorze treningowym. Wyrysuj wykres prezentujący wartości funkcji kosztu oraz poprawności klasyfikacji w kolejnych epokach. Wyznacz poprawność klasyfikacji uzyskanego modelu na zbiorze testowym. Spróbuj dobrać parametry (ilość epok, ilość neuronów, stała uczenia) tak aby uzyskać jak najlepszy wynik.

Rozwiązanie w postaci notatnika Jupyter (.ipynb) lub skrypt w języku Python (.py) umieść w Moodle lub prześlij do repozytorium GitHub.


Materiały:

About

Zadanie z laboratorium Sztuczne Sieci Neuronowe

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published