Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Addestramento del Percettrone | Rete Neurale da Zero
Introduzione alle Reti Neurali

bookSfida: Addestramento del Percettrone

Prima di procedere con l'addestramento del percettrone, è importante ricordare che utilizza la funzione di perdita entropia incrociata binaria discussa in precedenza. L'ultimo concetto chiave prima di implementare la retropropagazione è la formula per la derivata di questa funzione di perdita rispetto alle attivazioni di output, ana^n. Di seguito sono riportate le formule per la funzione di perdita e la sua derivata:

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}

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

Per verificare che il percettrone si stia addestrando correttamente, il metodo fit() stampa anche la perdita media a ogni epoca. Questa viene calcolata facendo la media della perdita su tutti gli esempi di addestramento in quell'epoca:

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

Infine, le formule per il calcolo dei gradienti sono le seguenti:

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}

I dati di addestramento di esempio (X_train) insieme alle etichette corrispondenti (y_train) sono memorizzati come array NumPy nel file utils.py. Inoltre, le istanze delle funzioni di attivazione sono anch'esse definite lì:

relu = ReLU()
sigmoid = Sigmoid()
Compito

Swipe to start coding

  1. Calcolare i seguenti gradienti: dz, d_weights, d_biases e da_prev nel metodo backward() della classe Layer.
  2. Calcolare l'output del modello nel metodo fit() della classe Perceptron.
  3. Calcolare da (danda^n) prima del ciclo, che rappresenta il gradiente della funzione di perdita rispetto alle attivazioni di output.
  4. Calcolare da ed eseguire la retropropagazione nel ciclo chiamando il metodo appropriato per ciascuno degli strati.

Se l'addestramento è stato implementato correttamente, dato il learning rate di 0.01, la perdita dovrebbe diminuire costantemente a ogni epoca.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 10
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

close

Awesome!

Completion rate improved to 4

bookSfida: Addestramento del Percettrone

Scorri per mostrare il menu

Prima di procedere con l'addestramento del percettrone, è importante ricordare che utilizza la funzione di perdita entropia incrociata binaria discussa in precedenza. L'ultimo concetto chiave prima di implementare la retropropagazione è la formula per la derivata di questa funzione di perdita rispetto alle attivazioni di output, ana^n. Di seguito sono riportate le formule per la funzione di perdita e la sua derivata:

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}

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

Per verificare che il percettrone si stia addestrando correttamente, il metodo fit() stampa anche la perdita media a ogni epoca. Questa viene calcolata facendo la media della perdita su tutti gli esempi di addestramento in quell'epoca:

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

Infine, le formule per il calcolo dei gradienti sono le seguenti:

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}

I dati di addestramento di esempio (X_train) insieme alle etichette corrispondenti (y_train) sono memorizzati come array NumPy nel file utils.py. Inoltre, le istanze delle funzioni di attivazione sono anch'esse definite lì:

relu = ReLU()
sigmoid = Sigmoid()
Compito

Swipe to start coding

  1. Calcolare i seguenti gradienti: dz, d_weights, d_biases e da_prev nel metodo backward() della classe Layer.
  2. Calcolare l'output del modello nel metodo fit() della classe Perceptron.
  3. Calcolare da (danda^n) prima del ciclo, che rappresenta il gradiente della funzione di perdita rispetto alle attivazioni di output.
  4. Calcolare da ed eseguire la retropropagazione nel ciclo chiamando il metodo appropriato per ciascuno degli strati.

Se l'addestramento è stato implementato correttamente, dato il learning rate di 0.01, la perdita dovrebbe diminuire costantemente a ogni epoca.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 10
single

single

some-alt