Uczenie maszynowe i sztuczne sieci neuronowe/Ćwiczenia 4

Z Brain-wiki
Wersja z dnia 18:27, 21 maj 2015 autorstwa Jarekz (dyskusja | edycje) (Utworzono nową stronę "=XOR= Jako pierwszy przykład z zastosowania sieci nieliniowych proszę skonstruować sieć z jedną warstwą ukrytą, rozwiązującą problem XOR. Potrzebne nam będą...")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

XOR

Jako pierwszy przykład z zastosowania sieci nieliniowych proszę skonstruować sieć z jedną warstwą ukrytą, rozwiązującą problem XOR.

Potrzebne nam będą następujące importy:

from pybrain.datasets.supervised import SupervisedDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer, RPropMinusTrainer
from pybrain.structure import  LinearLayer,SigmoidLayer
  • do stworzenia ciągu uczącego proszę wykorzystać funkcje addSample obiektu SupervisedDataSet:
ZU = SupervisedDataSet(N_wej,N_wyj)
ZU.addSample((0,0),(0.0,))
ZU.addSample((0,1),(1.0,))
ZU.addSample((1,0),(1.0,))
ZU.addSample((1,1),(0.0,))


  • W konstrukcji sieci proszę wykorzystać funkcję: buildNetwork, tak aby wszystkie warstwy były sigmoidalne:
siec = buildNetwork(N_wej, N_hid, N_wyj, outclass=SigmoidLayer)
  • Proszę zbadać strukturę wytworzonej sieci:
siec['in']
siec['hidden0']
siec['out']
  • sieć uczymy metodą wstecznej propagacji błędu, za pomocą funkcji train obiektu BackpropTrainer. Funkcja ta wykonuje jeden cykl uczenia (jednorazowe przejście przez ciąg uczący, przykłady podawane są w losowej kolejności) i zwraca wartość średniego błędu średniokwadratowego w tym cyklu.
  • Proszę wykreślić ewolucje wag i błędu. Ewolucję można zilustrować animacją. W tym celu na początku programu należy ustawić backend dla biblioteki matplotlib przed innymi importami i przełączyć grafikę w tryb interaktywny:
import matplotlib
matplotlib.use('TkAgg')
import pylab as py
py.ion()

Następnie animację robimy analogicznie jak w tym przykładzie.

  • Proszę zbadać co dzieje się z wagami wraz ze wzrostem ilości jednostek w warstwie ukrytej.
  • Proszę zbadać jak zmienia się zbieżność algorytmu przy zmianie moetody uczenia na Elastyczną propagację wsteczna.
Uwaga
w przypadku trenera RPropMinusTrainer należy podać zbiór uczący za pomocą metody setData().
  • Proszę powtórzyć analizę dla sieci, której warstwa wyjściowa ma jednostkę liniową.
  • Proszę zbadać wpływ regularyzacji (weightdecay w BackpropTrainer) na strukturę sieci.