single
Een Neurale Netwerklaag Maken
Veeg om het menu te tonen
Enkele Neurale Netwerklaag
In een eenvoudig feedforward-neuraal netwerk wordt de output van een neuron in een laag berekend met behulp van de gewogen som van zijn inputs, doorgegeven aan een activatiefunctie. Dit kan worden weergegeven als:
y=σ(W⋅x+b)
Waarbij:
- y: output van het neuron;
- W: een matrix die de gewichten voorstelt die verbonden zijn met het neuron;
- x: een kolommatrix (of vector) die de invoerwaarden naar het neuron voorstelt;
- b: een scalair waarde;
- σ: een activatiefunctie, zoals de sigmoid-, ReLU- of softmaxfunctie.
Voor optimale prestaties worden alle berekeningen uitgevoerd met matrices. We zullen deze taak op dezelfde manier aanpakken.





Veeg om te beginnen met coderen
Gegeven gewichten, inputs en bias voor een enkele neuronlaag, bereken de output met behulp van matrixvermenigvuldiging en de sigmoid activatiefunctie. Beschouw een laag met 3 inputs en 2 neuronen, waarbij één batch slechts één sample bevat.
-
Bepalen van vormen:
- De vorm van de inputmatrix
Imoet als eerste dimensie het aantal samples in de batch hebben. Gezien één sample met 3 inputs, is de grootte1x3; - De gewichtenmatrix
Wmoet kolommen hebben die de inputgewichten voor elk neuron representeren. Dus voor 2 neuronen met 3 inputs is de verwachte vorm3x2. Dit is niet het geval, dus je moet de gewichtenmatrix transponeren om de vereiste vorm te verkrijgen.
- De vorm van de inputmatrix
-
Matrixvermenigvuldiging:
- Met de matrices in de juiste vorm, voer de matrixvermenigvuldiging uit;
- Onthoud dat bij matrixvermenigvuldiging de output wordt verkregen uit het dotproduct van elke rij van de eerste matrix met elke kolom van de tweede matrix. Zorg ervoor dat je in de juiste volgorde vermenigvuldigt.
-
Bias toevoegen:
- Voer een elementgewijze optelling uit van het resultaat van de matrixvermenigvuldiging met de bias.
-
Toepassen van activatie:
- Gebruik de sigmoid activatiefunctie op het resultaat van de biasoptelling om de output van het neuron te verkrijgen;
- TensorFlow biedt de sigmoidfunctie aan als
tf.sigmoid().
Opmerking
Aan het einde van de cursus gaan we dieper in op het implementeren van een volledig feed-forward netwerk met TensorFlow. Deze oefening vormt de basis daarvoor.
Oplossing
Definieer laaggewichten, laaginvoer en laagbias
Hier definiëren we de gewichten, invoer en bias voor de laag. We gebruiken tf.Variable() voor gewichten en bias omdat dit trainbare parameters zijn in neurale netwerken, en tf.constant() voor de invoer omdat deze onveranderd blijft tijdens het trainen. dtype=tf.float64 wordt ingesteld voor de beste precisie.
W = tf.Variable([[0.5, 0.4, 0.7], [0.1, 0.9, 0.5]], dtype=tf.float64)
Dit is de gewichtenmatrix voor de neurale laag. Elke rij vertegenwoordigt de gewichten voor één neuron ten opzichte van elke invoer.
I = tf.constant([[0.5, 0.6, 0.1]], dtype=tf.float64)
Dit is de invoermatrix, die een enkele sample met 3 kenmerken voorstelt.
b = tf.Variable(0.1, dtype=tf.float64)
Dit is de biaswaarde. Het is een scalair die wordt toegevoegd aan de gewogen som voordat deze door de activatiefunctie gaat.
W = tf.transpose(W)
De gewichten zijn georganiseerd in rijen, maar voor matrixvermenigvuldiging moeten ze in kolommen staan. Daarom transponeren we de matrix. Hierna komt de eerste kolom overeen met de gewichten van het eerste neuron en de tweede kolom met die van het tweede neuron.
weighted_sum = tf.matmul(I, W)
Hier berekenen we de matrixvermenigvuldiging van de invoer en de getransponeerde gewichtenmatrix. Dit geeft ons de gewogen som van de inputs.
Laten we deze matrixvermenigvuldiging stap voor stap bekijken:
Bepaal de vorm van de resulterende matrix:
De resulterende matrix krijgt het aantal rijen van de eerste matrix (matrix I met vorm 1x3) en het aantal kolommen van de tweede matrix (matrix W met vorm 3x2). Dus de resulterende matrix heeft de vorm 1x2.
Proces van matrixvermenigvuldiging:
Voor het eerste element van de resulterende matrix (noemen we het S[0][0] voor "gewogen som"):
- Vermenigvuldig het eerste element van de eerste rij van matrix
Imet het eerste element van de eerste kolom van matrixW:0.5 * 0.5 = 0.25; - Vermenigvuldig het tweede element van de eerste rij van matrix
Imet het tweede element van de eerste kolom van matrixW:0.6 * 0.4 = 0.24; - Vermenigvuldig het derde element van de eerste rij van matrix
Imet het derde element van de eerste kolom van matrixW:0.1 * 0.7 = 0.07; - Tel deze producten op:
0.25 + 0.24 + 0.07 = 0.56.
Dus, S[0][0] is 0.56.
Voor het tweede element van de resulterende matrix (S[0][1]):
- Vermenigvuldig het eerste element van de eerste rij van matrix
Imet het eerste element van de tweede kolom van matrixW:0.5 * 0.1 = 0.05; - Vermenigvuldig het tweede element van de eerste rij van matrix
Imet het tweede element van de tweede kolom van matrixW:0.6 * 0.9 = 0.54; - Vermenigvuldig het derde element van de eerste rij van matrix
Imet het derde element van de tweede kolom van matrixW:0.1 * 0.5 = 0.05; - Tel deze producten op:
0.05 + 0.54 + 0.05 = 0.64.
Dus, S[0][1] is 0.64.
De resulterende matrix S van het vermenigvuldigen van matrix I en matrix W is dus:
[ [0.56, 0.64] ]
biased_sum = weighted_sum + b
De bias wordt toegevoegd aan de gewogen som. Dit is een vorm van affine transformatie die het resultaat verschuift om een betere fit tijdens het trainen te bereiken.
neuron_output = tf.sigmoid(biased_sum)
De sigmoidfunctie perst de waarde tussen 0 en 1, zodat onze output in een genormaliseerd bereik valt. Dit wordt vaak gebruikt bij binaire classificatieproblemen.
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.