single
Haaste: Perceptronin Kouluttaminen
Pyyhkäise näyttääksesi valikon
Ennen kuin jatkat perceptronin kouluttamista, muista, että se käyttää aiemmin käsiteltyä binääristä ristientropiahäviöfunktiota. Viimeinen keskeinen käsite ennen takaisinkytkennän (backpropagation) toteuttamista on tämän häviöfunktion derivaatan kaava verrattuna ulostuloaktivaatioihin, $a^n$. Alla on esitetty 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 harjoitusesimerkeille:
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 jokaisessa kerroksessa ovat seuraavat:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlToteutuksen yksityiskohtia muistettavaksi
Kun käännät näitä kaavoja Python-koodiksi backward()-metodia varten, muista aiemmissa luvuissa käsitellyt NumPy-operaatiot:
- Operaattori ⊙ tarkoittaa alkiokohtaista kertolaskua, joka tehdään Pythonissa tavallisella
*-operaattorilla. - Operaattori ⋅ tarkoittaa pistetuloa (dot product), joka toteutetaan
np.dot()-funktiolla. - Yläindeksi T tarkoittaa matriisin transponointia, joka tehdään
.T-attribuutilla. - Laskettaessa f′l(zl), voit kutsua kerroksen aktivointifunktion derivaattaa dynaamisesti käyttämällä
self.activation.derivative(self.outputs).
Tämä tekee backward()-metodin yleisestä rakenteesta seuraavanlaisen:
def backward(self, da, learning_rate):
dz = ... # using da and self.activation.derivative()
d_weights = ... # using np.dot() and .T
d_biases = ...
da_prev = ...
self.weights -= learning_rate * d_weights
self.biases -= learning_rate * d_biases
return da_prev
Vastaavasti, kun kokoat kaiken yhteen fit()-metodissa, muista, että sinun täytyy käydä verkko läpi taaksepäin virheen levittämiseksi. Yleinen rakenne näyttää tältä:
def fit(self, training_data, labels, epochs, learning_rate):
# ... (Epoch loop and data shuffling) ...
# Forward propagation
output = ...
# Computing the gradient of the loss function w.r.t. output (da^n)
da = ...
# Backward propagation through all layers
for layer in self.layers[::-1]:
da = ... # Call the backward() method of the layer
Esimerkkiharjoitusaineisto (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()
Pyyhkäise aloittaaksesi koodauksen
Tavoitteena on saattaa loppuun monikerroksisen perceptronin koulutusprosessi toteuttamalla takaisinkytkentä (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 bias-arvojen suhteen, yhtä suuri kuindz;
da_prev: tappion gradientti edellisen kerroksen aktivaatioiden suhteen, saadaan kertomalla transponoitu painomatriisidz:lla.- Päivitä painot ja bias-arvot käyttäen oppimisnopeutta.
- Täydennä
fit()-metodiPerceptron-luokassa:- Laske mallin ulostulo kutsumalla
forward()-metodia; - Laske tappio käyttäen ristientropia-kaavaa;
- Laske mallin ulostulo kutsumalla
- Laske dan — tappion derivaatta ulostuloaktivaation suhteen;
- Käy kerrokset taaksepäin läpi ja suorita takaisinkytkentä kutsumalla jokaisen kerroksen
backward()-metodia.
- Käy kerrokset taaksepäin läpi ja suorita takaisinkytkentä kutsumalla jokaisen kerroksen
- Tarkista koulutuksen eteneminen:
- Jos kaikki on toteutettu oikein, tappion tulisi vähentyä tasaisesti jokaisella epookilla, kun käytetään oppimisnopeutta
0.01.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme