Sieć neuronowa - pojedyńczy neruon ze sprzężeniem zwrotnym



# mamy 3 wejscia, oraz neuron ze sprzężeniem zwrotnym
# z pomocą weryfikowanego błedu korygujemy wagi



import numpy as np
def sigmoida(x):
            return 1/(1+np.exp(-x))
def sigmoida_pochodna(x):
            return x*(1-x)

uczace_wejscie=np.array([[0,0,1],
                         [1,1,1],
                         [1,0,1],
                         [0,1,1]])
print(uczace_wejscie)

uczace_wyjscie=np.array([[1,1,1,0]]).T          # transponowanie macierzy
print(uczace_wyjscie)
np.random.seed(1)

wagi_synaptyczne=2*np.random.random((3,1))-1    # tworzymy macież o wymiarze 3x1 z losowych liczb z predizału (0,1) następnie mnożymy x2 i odejmujemy 1 aby otrzymać liczby z przedziału -1,1
print('losowe wagi synaptyczne startu : ')
print(wagi_synaptyczne)
for iteracja in range(50000):
            warstwa_wejsciowa=uczace_wejscie
            wyjscie=sigmoida(np.dot(warstwa_wejsciowa, wagi_synaptyczne))           # zwraca iloczyn skalarny dwóch tablic
            blad=uczace_wyjscie-wyjscie
            poprawki=blad*sigmoida_pochodna(wyjscie)
            wagi_synaptyczne+=np.dot(warstwa_wejsciowa.T,poprawki)
print('wagi synaptyczne po nauce : ')
print(wagi_synaptyczne)
print('wyjścia po nauce : ')
print(wyjscie)
    

	


:)