Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dekoza/40581fef33ee2309fae55cea4ef20c1e to your computer and use it in GitHub Desktop.
Save dekoza/40581fef33ee2309fae55cea4ef20c1e to your computer and use it in GitHub Desktop.
from random import choice # zwraca losowy element z listy
from numpy import array # macierz (typ danych)
from numpy import dot # iloczyn skalarny
from numpy import random # losowanie macierzy (niestety konflikt nazw)
dane_treningowe = [ # modelujemy AND
[array([1, 0, 0]), 0], # pierwszy element to wzbudzenie, zawsze równy 1
(array([1, 1, 1]), 1),
(array([1, 1, 0]), 1),
(array([1, 0, 1]), 1),
]
pamiec = random.rand(3) # losuję trzyelementową macierz (typ array)
wsp_ucz = 0.2 # współczynnik uczenia
ile = 100 # liczba powtórzeń uczenia
def proguj(liczba):
if liczba < 0:
return 0
return 1
# uczenie:
bledy = []
for i in range(ile):
dane, spodziewane = choice(dane_treningowe) # losuję zestaw uczący
wynik = dot(pamiec, dane) # iloczyn skalarny dwóch wektorów - pamięci i danych
error = spodziewane - proguj(wynik) # obliczenie błędu - jesli różne od 0, to trzeba poprawić pamięć
bledy.append(error)
pamiec += wsp_ucz * error * dane # jesli error != 0 to dodamy do wektora pamięci wektor powstały z takiego mnożenia (bo dane to wektor, a reszta to liczby)
for dane, odrzut in dane_treningowe:
wynik = dot(dane, pamiec)
print("{}: {} -> {}".format(dane[1:], wynik, proguj(wynik)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment