Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Utfordring: Trene Perseptronen | Nevralt Nettverk fra Bunnen Av
Introduksjon til nevrale nettverk

bookUtfordring: Trene Perseptronen

Før du går videre med å trene perseptronen, husk at den bruker binær kryssentropi-tapfunksjonen som ble diskutert tidligere. Det siste viktige konseptet før implementering av tilbakepropagasjon er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, ana^n. Nedenfor er formlene for tapfunksjonen og dens deriverte:

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}

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

For å verifisere at perseptronen trenes korrekt, skriver fit()-metoden også ut gjennomsnittlig tap ved hver epoke. Dette beregnes ved å ta gjennomsnittet av tapet over alle treningsdataene i den aktuelle epoken:

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))

Til slutt er formlene for å beregne gradientene som følger:

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}

Eksempeldata for trening (X_train) sammen med tilhørende etiketter (y_train) er lagret som NumPy-arrays i filen utils.py. I tillegg er instanser av aktiveringsfunksjonene også definert der:

relu = ReLU()
sigmoid = Sigmoid()
Oppgave

Swipe to start coding

  1. Beregn følgende gradienter: dz, d_weights, d_biases og da_prev i backward()-metoden til Layer-klassen.
  2. Beregn output til modellen i fit()-metoden til Perceptron-klassen.
  3. Beregn da (danda^n) før løkken, som er gradienten til tapet med hensyn til utgangsaktiveringer.
  4. Beregn da og utfør tilbakepropagering i løkken ved å kalle riktig metode for hvert av lagene.

Hvis du har implementert treningen korrekt, skal tapet reduseres jevnt for hver epoke med læringsraten 0.01.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 10
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

close

Awesome!

Completion rate improved to 4

bookUtfordring: Trene Perseptronen

Sveip for å vise menyen

Før du går videre med å trene perseptronen, husk at den bruker binær kryssentropi-tapfunksjonen som ble diskutert tidligere. Det siste viktige konseptet før implementering av tilbakepropagasjon er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, ana^n. Nedenfor er formlene for tapfunksjonen og dens deriverte:

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}

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

For å verifisere at perseptronen trenes korrekt, skriver fit()-metoden også ut gjennomsnittlig tap ved hver epoke. Dette beregnes ved å ta gjennomsnittet av tapet over alle treningsdataene i den aktuelle epoken:

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))

Til slutt er formlene for å beregne gradientene som følger:

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}

Eksempeldata for trening (X_train) sammen med tilhørende etiketter (y_train) er lagret som NumPy-arrays i filen utils.py. I tillegg er instanser av aktiveringsfunksjonene også definert der:

relu = ReLU()
sigmoid = Sigmoid()
Oppgave

Swipe to start coding

  1. Beregn følgende gradienter: dz, d_weights, d_biases og da_prev i backward()-metoden til Layer-klassen.
  2. Beregn output til modellen i fit()-metoden til Perceptron-klassen.
  3. Beregn da (danda^n) før løkken, som er gradienten til tapet med hensyn til utgangsaktiveringer.
  4. Beregn da og utfør tilbakepropagering i løkken ved å kalle riktig metode for hvert av lagene.

Hvis du har implementert treningen korrekt, skal tapet reduseres jevnt for hver epoke med læringsraten 0.01.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 10
single

single

some-alt