Neuron rétegek

A neurális hálózatoknak tipikusan több mint egy rétegük van. Ezek a rétegek nem mások mint neuron csoportok. Minden egyes azonos rétegen lévő neuron ugyanazokat a bemeneti paramétereket kapja meg, majd a súlyok és ‘bias’ segítségével egyedi kimenetet hoz létre. Egy réteg kimenete egy készlet ezekből a kimenetekből.

A példába 4 bementi értékünk lesz de többfajta súlyunk és ‘bias’-unk.

inputs = [1, 2, 3 , 2.5]
weights1 = [0.2, 0.8, -0.5, 1]
weights2 = [0.5, -0.91, 0.26, -0.5]
weights3 = [-0.26, -0.27, 0.17, 0.87]

bias1 = 1
bias2 = 3
bias3 = 0.5

outputs = [
        # Neuron 1:
        inputs[0]*weights1[0] +
        inputs[1]*weights1[1] +
        inputs[2]*weights1[2] +
        inputs[3]*weights1[3] + bias1,

        # Neuron 2:
        inputs[0]*weights2[0] +
        inputs[1]*weights2[1] +
        inputs[2]*weights2[2] +
        inputs[3]*weights2[3] + bias2,

        # Neuron 3
        inputs[0]*weights3[0] +  
        inputs[1]*weights3[1] +
        inputs[2]*weights3[2] +
        inputs[3]*weights3[3] + bias3]
print(outputs)

Ebben az esetben 3 készletni súlyunk és ‘bias’-unk van, ami 3 neuron határoz meg. Minden neuron a ugyanahoz a bemeneti értékhez “kapcsodik”, csak mindengyiknke különböző a paramétere. Amikor minden neuronnak az adott rétegből kapcsolata van az előző réteg minden neuronjával azt “fully connected“-nek nevezzük. Mivel ezt is fáradtságos volt leírni, pedig csak 3 neuront hoztunk létre így ha többte akarnánk létrehozni célszerű lesz, úgynevezett ‘loop’-okat létrehozni. A következőekben a súlyokat egy nagy listába teszsük így mivel így keresztül tudunk menni rajtuk.

inputs = [1, 2, 3 , 2.5]
weights = [[0.2, 0.8, -0.5, 1], [0.5, -0.91, 0.26, -0.5], [-0.26, -0.27, 0.17, 0.87]]
biases = [2, 3, 0.5]

#adott layer kimenete
layer_outputs = []
#Hogy minden neuront megkapjunk ezért 'for' ciklust/loop-ot hazsnálunk.
for neuron_weights, neuron_bias in zip(weights, biases):
    #lenullázzuk az adott neuron kimenetelét
    neuron_output = 0
    #minden bemenet és súlya a neutronnak
    for n_input, weight in zip(inputs, neuron_weights):
        #Megszorozzuk a bemenetet a hozzákapcsolt súllyal.
        #és utána hozzáadjuk a neuron_output változóhoz
        neuron_output += n_input-weight
    #hozzáadjuk a 'bias'-t
    neuron_output += neuron_bias
    #Ezt pedig beletesszük a llayer_outputs listába
    layer_outputs.append(neuron_output)

print(layer_outputs)

Amit nem értettem én sem, hogy mi a zip(). Az anniyt segít, hogy keresztül tudjunk menni egyszerr több listán is. Vagyis itt azt kell elképzelni, hogy az első for ciklusba bekerül a weights és a biases. Először ugye mindkettőből a nulladik indexű tag. A weights esetében ez ugye egy lista. Ezután a következő for ciklusban pedig az inputok és a változóként létrehozott weights kerül bele. Következő lépésben végigmegyünk az input lista elemein és a weights lista első elemén is(ami egy lista, így azon is végig tudunk menni). Az azonos indexen szereplő értékeke összeszorozza majd, hozzáadja a ‘bias’-t és ez lesz az első értékünk a layer_outputs-ban.

Az angol nyelvű videó itt található meg.

Disclaimer: A videó és a leírtak nem a saját szerzeményeim. A videó a Sentdex youtube csatornáé, az oldal tartalma pedig a “Neural Networks from Scratch in Python” című könyv alapján készült.

Az előzőekben bemutattam, hogyan is kell egy neuron felépíteni.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük