Haaste: Perceptronin Kouluttaminen
Ennen kuin jatkat perceptronin kouluttamista, huomioi, että se käyttää aiemmin käsiteltyä binääristä ristientropiahäviöfunktiota. Viimeinen keskeinen käsite ennen takaisinkytkennän toteuttamista on tämän häviöfunktion derivaatan kaava ulostuloaktivaation suhteen, an. Alla ovat häviöfunktion ja sen derivaatan kaavat:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−ymissä an=y^
Perceptronin koulutuksen oikeellisuuden varmistamiseksi fit()-metodi tulostaa myös keskimääräisen häviön jokaisella epookilla. Tämä lasketaan ottamalla keskiarvo häviöstä kaikille kyseisen epookin koulutusesimerkeille:
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))Lopuksi gradienttien laskentakaavat ovat seuraavat:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlEsimerkkikoulutusdata (X_train) sekä vastaavat luokat (y_train) on tallennettu NumPy-taulukoina tiedostoon utils.py. Lisäksi aktivointifunktioiden instanssit on määritelty siellä:
relu = ReLU()
sigmoid = Sigmoid()
Swipe to start coding
Tavoitteesi on saattaa loppuun monikerroksisen perceptronin koulutusprosessi toteuttamalla takaisinlevitys (backpropagation) ja päivittämällä mallin parametrit.
Noudata näitä vaiheita huolellisesti:
- Toteuta
backward()-metodiLayer-luokkaan:
- Laske seuraavat gradientit:
dz: tappion derivaatta suhteessa pre-aktivaatioarvoihin, käyttäen aktivointifunktion derivaattaa;
d_weights: tappion gradientti painojen suhteen, laskettunadz:n ja transponoidun syötevektorin pistetulona;d_biases: tappion gradientti biasien suhteen, joka on yhtä kuindz;da_prev: tappion gradientti edellisen kerroksen aktivaatioiden suhteen, saadaan kertomalla transponoitu painomatriisidz:lla.- Päivitä painot ja biasit käyttäen oppimisnopeutta.
- Täydennä
fit()-metodiPerceptron-luokassa:- Laske mallin ulostulo kutsumalla
forward()-metodia;
- Laske mallin ulostulo kutsumalla
- Laske tappio käyttäen ristientropiakaavaa;
- Laske dan — tappion derivaatta ulostuloaktivaation suhteen;
- Käy kerrokset taaksepäin läpi ja suorita takaisinlevitys kutsumalla jokaisen kerroksen
backward()-metodia.
- Käy kerrokset taaksepäin läpi ja suorita takaisinlevitys kutsumalla jokaisen kerroksen
- Tarkista koulutuksen käyttäytyminen:
- Jos kaikki on toteutettu oikein, tappion tulisi vähentyä tasaisesti jokaisella epookilla, kun oppimisnopeus on
0.01.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Haaste: Perceptronin Kouluttaminen
Pyyhkäise näyttääksesi valikon
Ennen kuin jatkat perceptronin kouluttamista, huomioi, että se käyttää aiemmin käsiteltyä binääristä ristientropiahäviöfunktiota. Viimeinen keskeinen käsite ennen takaisinkytkennän toteuttamista on tämän häviöfunktion derivaatan kaava ulostuloaktivaation suhteen, an. Alla ovat häviöfunktion ja sen derivaatan kaavat:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−ymissä an=y^
Perceptronin koulutuksen oikeellisuuden varmistamiseksi fit()-metodi tulostaa myös keskimääräisen häviön jokaisella epookilla. Tämä lasketaan ottamalla keskiarvo häviöstä kaikille kyseisen epookin koulutusesimerkeille:
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))Lopuksi gradienttien laskentakaavat ovat seuraavat:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlEsimerkkikoulutusdata (X_train) sekä vastaavat luokat (y_train) on tallennettu NumPy-taulukoina tiedostoon utils.py. Lisäksi aktivointifunktioiden instanssit on määritelty siellä:
relu = ReLU()
sigmoid = Sigmoid()
Swipe to start coding
Tavoitteesi on saattaa loppuun monikerroksisen perceptronin koulutusprosessi toteuttamalla takaisinlevitys (backpropagation) ja päivittämällä mallin parametrit.
Noudata näitä vaiheita huolellisesti:
- Toteuta
backward()-metodiLayer-luokkaan:
- Laske seuraavat gradientit:
dz: tappion derivaatta suhteessa pre-aktivaatioarvoihin, käyttäen aktivointifunktion derivaattaa;
d_weights: tappion gradientti painojen suhteen, laskettunadz:n ja transponoidun syötevektorin pistetulona;d_biases: tappion gradientti biasien suhteen, joka on yhtä kuindz;da_prev: tappion gradientti edellisen kerroksen aktivaatioiden suhteen, saadaan kertomalla transponoitu painomatriisidz:lla.- Päivitä painot ja biasit käyttäen oppimisnopeutta.
- Täydennä
fit()-metodiPerceptron-luokassa:- Laske mallin ulostulo kutsumalla
forward()-metodia;
- Laske mallin ulostulo kutsumalla
- Laske tappio käyttäen ristientropiakaavaa;
- Laske dan — tappion derivaatta ulostuloaktivaation suhteen;
- Käy kerrokset taaksepäin läpi ja suorita takaisinlevitys kutsumalla jokaisen kerroksen
backward()-metodia.
- Käy kerrokset taaksepäin läpi ja suorita takaisinlevitys kutsumalla jokaisen kerroksen
- Tarkista koulutuksen käyttäytyminen:
- Jos kaikki on toteutettu oikein, tappion tulisi vähentyä tasaisesti jokaisella epookilla, kun oppimisnopeus on
0.01.
Ratkaisu
Kiitos palautteestasi!
single