Utfordring: Trening av Perseptronen
Før du går videre med å trene perseptronen, husk at den bruker binær kryssentropi-tapfunksjonen som tidligere er diskutert. Det siste viktige konseptet før implementering av tilbakepropagering er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, an. Nedenfor er formlene for tapfunksjonen og dens deriverte:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−yhvor an=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 treningsdata 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=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))Til slutt er formlene for å beregne gradientene som følger:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlEksempeldataene for trening (X_train) sammen med de tilhørende etikettene (y_train) er lagret som NumPy-arrays i filen utils.py. I tillegg er instanser av aktiveringsfunksjonene også definert der:
relu = ReLU()
sigmoid = Sigmoid()
Swipe to start coding
Målet ditt er å fullføre treningsprosessen for en flerlags perceptron ved å implementere backpropagation og oppdatere modellparametrene.
Følg disse trinnene nøye:
- Implementer
backward()-metoden iLayer-klassen:
- Beregn følgende gradienter:
dz: derivert av tapet med hensyn til pre-aktiveringsverdiene, ved å bruke den deriverte av aktiveringsfunksjonen;d_weights: gradient av tapet med hensyn til vektene, beregnet som prikkproduktet avdzog den transponerte input-vektoren;
d_biases: gradient av tapet med hensyn til biasene, likdz;da_prev: gradient av tapet med hensyn til aktiveringene i forrige lag, oppnådd ved å multiplisere den transponerte vektmatrisen meddz.- Oppdater vektene og biasene ved å bruke læringsraten.
- Fullfør
fit()-metoden iPerceptron-klassen:- Beregn modellens output ved å kalle
forward()-metoden; - Kalkuler tapet ved hjelp av kryssentropi-formelen;
- Beregn modellens output ved å kalle
- Beregn dan — den deriverte av tapet med hensyn til utgangsaktiveringene;
- Gå bakover gjennom lagene og utfør backpropagation ved å kalle hver lag sin
backward()-metode.
- Gå bakover gjennom lagene og utfør backpropagation ved å kalle hver lag sin
- Sjekk treningsatferden:
- Hvis alt er implementert korrekt, skal tapet jevnt avta for hver epoke når du bruker en læringsrate på
0.01.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4
Utfordring: Trening av Perseptronen
Sveip for å vise menyen
Før du går videre med å trene perseptronen, husk at den bruker binær kryssentropi-tapfunksjonen som tidligere er diskutert. Det siste viktige konseptet før implementering av tilbakepropagering er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, an. Nedenfor er formlene for tapfunksjonen og dens deriverte:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−yhvor an=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 treningsdata 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=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))Til slutt er formlene for å beregne gradientene som følger:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlEksempeldataene for trening (X_train) sammen med de tilhørende etikettene (y_train) er lagret som NumPy-arrays i filen utils.py. I tillegg er instanser av aktiveringsfunksjonene også definert der:
relu = ReLU()
sigmoid = Sigmoid()
Swipe to start coding
Målet ditt er å fullføre treningsprosessen for en flerlags perceptron ved å implementere backpropagation og oppdatere modellparametrene.
Følg disse trinnene nøye:
- Implementer
backward()-metoden iLayer-klassen:
- Beregn følgende gradienter:
dz: derivert av tapet med hensyn til pre-aktiveringsverdiene, ved å bruke den deriverte av aktiveringsfunksjonen;d_weights: gradient av tapet med hensyn til vektene, beregnet som prikkproduktet avdzog den transponerte input-vektoren;
d_biases: gradient av tapet med hensyn til biasene, likdz;da_prev: gradient av tapet med hensyn til aktiveringene i forrige lag, oppnådd ved å multiplisere den transponerte vektmatrisen meddz.- Oppdater vektene og biasene ved å bruke læringsraten.
- Fullfør
fit()-metoden iPerceptron-klassen:- Beregn modellens output ved å kalle
forward()-metoden; - Kalkuler tapet ved hjelp av kryssentropi-formelen;
- Beregn modellens output ved å kalle
- Beregn dan — den deriverte av tapet med hensyn til utgangsaktiveringene;
- Gå bakover gjennom lagene og utfør backpropagation ved å kalle hver lag sin
backward()-metode.
- Gå bakover gjennom lagene og utfør backpropagation ved å kalle hver lag sin
- Sjekk treningsatferden:
- Hvis alt er implementert korrekt, skal tapet jevnt avta for hver epoke når du bruker en læringsrate på
0.01.
Løsning
Takk for tilbakemeldingene dine!
single