Utfordring: Trening av Perseptron
Før du går videre med å trene perceptronen, husk at den benytter binær kryssentropi-tapfunksjonen som tidligere diskutert. Det siste nøkkelkonseptet før implementering av tilbakepropagasjon er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, an. Nedenfor vises formlene for tapfunksjonen og dens deriverte:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−yhvor an=y^
For å verifisere at perceptronen trenes korrekt, skriver fit()-metoden også ut gjennomsnittlig tap ved hver epoke. Dette beregnes ved å ta gjennomsnittet av tapet for 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⋅dzlEksempeldata 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()
Swipe to start coding
Målet ditt er å fullføre treningsprosessen for en flerlags perceptron ved å implementere tilbakepropagering og oppdatere modellparametrene.
Følg disse trinnene nøye:
- Implementer
backward()-metoden iLayer-klassen:
- Beregn følgende gradienter:
dz: den deriverte av tapet med hensyn til preaktiveringsverdiene, ved å bruke den deriverte av aktiveringsfunksjonen;d_weights: gradienten av tapet med hensyn til vektene, beregnet som prikkproduktet avdzog den transponerte input-vektoren;
d_biases: gradienten av tapet med hensyn til biasene, likdz;da_prev: gradienten av tapet med hensyn til aktiveringene i forrige lag, oppnådd ved å multiplisere den transponerte vektmatrisen meddz.- Oppdater vektene og biasene ved hjelp av læringsraten.
- Fullfør
fit()-metoden iPerceptron-klassen:- Beregn modellens output ved å kalle
forward()-metoden;
- Beregn modellens output ved å kalle
- Kalkuler tapet ved hjelp av kryssentropiformelen;
- Beregn dan — den deriverte av tapet med hensyn til utgangsaktiveringene;
- Gå bakover gjennom lagene og utfør tilbakepropagering ved å kalle hver lag sin
backward()-metode.
- Gå bakover gjennom lagene og utfør tilbakepropagering ved å kalle hver lag sin
- Kontroller treningsforløpet:
- 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
Can you explain how the derivative of the binary cross-entropy loss is used in backpropagation?
What is the purpose of printing the average loss at each epoch?
Can you clarify how the gradients are computed using the provided formulas?
Awesome!
Completion rate improved to 4
Utfordring: Trening av Perseptron
Sveip for å vise menyen
Før du går videre med å trene perceptronen, husk at den benytter binær kryssentropi-tapfunksjonen som tidligere diskutert. Det siste nøkkelkonseptet før implementering av tilbakepropagasjon er formelen for den deriverte av denne tapfunksjonen med hensyn til utgangsaktiveringene, an. Nedenfor vises formlene for tapfunksjonen og dens deriverte:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−yhvor an=y^
For å verifisere at perceptronen trenes korrekt, skriver fit()-metoden også ut gjennomsnittlig tap ved hver epoke. Dette beregnes ved å ta gjennomsnittet av tapet for 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⋅dzlEksempeldata 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()
Swipe to start coding
Målet ditt er å fullføre treningsprosessen for en flerlags perceptron ved å implementere tilbakepropagering og oppdatere modellparametrene.
Følg disse trinnene nøye:
- Implementer
backward()-metoden iLayer-klassen:
- Beregn følgende gradienter:
dz: den deriverte av tapet med hensyn til preaktiveringsverdiene, ved å bruke den deriverte av aktiveringsfunksjonen;d_weights: gradienten av tapet med hensyn til vektene, beregnet som prikkproduktet avdzog den transponerte input-vektoren;
d_biases: gradienten av tapet med hensyn til biasene, likdz;da_prev: gradienten av tapet med hensyn til aktiveringene i forrige lag, oppnådd ved å multiplisere den transponerte vektmatrisen meddz.- Oppdater vektene og biasene ved hjelp av læringsraten.
- Fullfør
fit()-metoden iPerceptron-klassen:- Beregn modellens output ved å kalle
forward()-metoden;
- Beregn modellens output ved å kalle
- Kalkuler tapet ved hjelp av kryssentropiformelen;
- Beregn dan — den deriverte av tapet med hensyn til utgangsaktiveringene;
- Gå bakover gjennom lagene og utfør tilbakepropagering ved å kalle hver lag sin
backward()-metode.
- Gå bakover gjennom lagene og utfør tilbakepropagering ved å kalle hver lag sin
- Kontroller treningsforløpet:
- 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