Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Uitdaging: Het Trainen van de Perceptron | Neuraal Netwerk Vanaf Nul
Introductie tot Neurale Netwerken

bookUitdaging: Het Trainen van de Perceptron

Voordat u doorgaat met het trainen van de perceptron, houd er rekening mee dat deze gebruikmaakt van de binaire cross-entropy verliesfunctie die eerder is besproken. Het laatste belangrijke concept voordat backpropagation wordt geïmplementeerd, is de formule voor de afgeleide van deze verliesfunctie ten opzichte van de outputactivaties, ana^n. Hieronder staan de formules voor de verliesfunctie en de afgeleide:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

waarbij an=y^a^n = \hat{y}

Om te controleren of de perceptron correct traint, drukt de fit()-methode ook het gemiddelde verlies af bij elk epoch. Dit wordt berekend door het verlies te middelen over alle trainingsvoorbeelden in dat epoch:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Tot slot zijn de formules voor het berekenen van de gradiënten als volgt:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

De voorbeeldtrainingsgegevens (X_train) samen met de bijbehorende labels (y_train) zijn opgeslagen als NumPy-arrays in het bestand utils.py. Daarnaast zijn daar ook instanties van de activatiefuncties gedefinieerd:

relu = ReLU()
sigmoid = Sigmoid()
Taak

Swipe to start coding

  1. Bereken de volgende gradiënten: dz, d_weights, d_biases en da_prev in de backward()-methode van de Layer-klasse.
  2. Bereken de output van het model in de fit()-methode van de Perceptron-klasse.
  3. Bereken da (danda^n) vóór de lus; dit is de gradiënt van het verlies ten opzichte van de outputactivaties.
  4. Bereken da en voer backpropagation uit in de lus door de juiste methode voor elke laag aan te roepen.

Als je de training correct hebt geïmplementeerd, zou het verlies bij een leersnelheid van 0.01 gestaag moeten afnemen met elke epoch.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 10
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

close

Awesome!

Completion rate improved to 4

bookUitdaging: Het Trainen van de Perceptron

Veeg om het menu te tonen

Voordat u doorgaat met het trainen van de perceptron, houd er rekening mee dat deze gebruikmaakt van de binaire cross-entropy verliesfunctie die eerder is besproken. Het laatste belangrijke concept voordat backpropagation wordt geïmplementeerd, is de formule voor de afgeleide van deze verliesfunctie ten opzichte van de outputactivaties, ana^n. Hieronder staan de formules voor de verliesfunctie en de afgeleide:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

waarbij an=y^a^n = \hat{y}

Om te controleren of de perceptron correct traint, drukt de fit()-methode ook het gemiddelde verlies af bij elk epoch. Dit wordt berekend door het verlies te middelen over alle trainingsvoorbeelden in dat epoch:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Tot slot zijn de formules voor het berekenen van de gradiënten als volgt:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

De voorbeeldtrainingsgegevens (X_train) samen met de bijbehorende labels (y_train) zijn opgeslagen als NumPy-arrays in het bestand utils.py. Daarnaast zijn daar ook instanties van de activatiefuncties gedefinieerd:

relu = ReLU()
sigmoid = Sigmoid()
Taak

Swipe to start coding

  1. Bereken de volgende gradiënten: dz, d_weights, d_biases en da_prev in de backward()-methode van de Layer-klasse.
  2. Bereken de output van het model in de fit()-methode van de Perceptron-klasse.
  3. Bereken da (danda^n) vóór de lus; dit is de gradiënt van het verlies ten opzichte van de outputactivaties.
  4. Bereken da en voer backpropagation uit in de lus door de juiste methode voor elke laag aan te roepen.

Als je de training correct hebt geïmplementeerd, zou het verlies bij een leersnelheid van 0.01 gestaag moeten afnemen met elke epoch.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 10
single

single

some-alt