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 con Python

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

L'obiettivo è completare il processo di addestramento per un perceptrone multistrato implementando la retropropagazione e aggiornando i parametri del modello.

Seguire attentamente questi passaggi:

  1. Implementare il metodo backward() nella classe Layer:
  • Calcolare i seguenti gradienti:
    • dz: derivata della funzione di perdita rispetto ai valori di pre-attivazione, utilizzando la derivata della funzione di attivazione;
  • d_weights: gradiente della perdita rispetto ai pesi, calcolato come prodotto scalare tra dz e il vettore di input trasposto;
  • d_biases: gradiente della perdita rispetto ai bias, uguale a dz;
  • da_prev: gradiente della perdita rispetto alle attivazioni dello strato precedente, ottenuto moltiplicando la matrice dei pesi trasposta per dz.
  • Aggiornare i pesi e i bias utilizzando il learning rate.
  1. Completare il metodo fit() nella classe Perceptron:
  • Calcolare l'output del modello chiamando il metodo forward();
  • Calcolare la perdita utilizzando la formula dell'entropia incrociata;
  • Calcolare danda^n — la derivata della perdita rispetto alle attivazioni di output;
  • Scorrere all'indietro attraverso gli strati, eseguendo la retropropagazione chiamando il metodo backward() di ciascun layer.
  1. Verificare il comportamento dell'addestramento:
  • Se tutto è implementato correttamente, la perdita dovrebbe diminuire costantemente a ogni epoca utilizzando un learning rate di 0.01.

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

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

L'obiettivo è completare il processo di addestramento per un perceptrone multistrato implementando la retropropagazione e aggiornando i parametri del modello.

Seguire attentamente questi passaggi:

  1. Implementare il metodo backward() nella classe Layer:
  • Calcolare i seguenti gradienti:
    • dz: derivata della funzione di perdita rispetto ai valori di pre-attivazione, utilizzando la derivata della funzione di attivazione;
  • d_weights: gradiente della perdita rispetto ai pesi, calcolato come prodotto scalare tra dz e il vettore di input trasposto;
  • d_biases: gradiente della perdita rispetto ai bias, uguale a dz;
  • da_prev: gradiente della perdita rispetto alle attivazioni dello strato precedente, ottenuto moltiplicando la matrice dei pesi trasposta per dz.
  • Aggiornare i pesi e i bias utilizzando il learning rate.
  1. Completare il metodo fit() nella classe Perceptron:
  • Calcolare l'output del modello chiamando il metodo forward();
  • Calcolare la perdita utilizzando la formula dell'entropia incrociata;
  • Calcolare danda^n — la derivata della perdita rispetto alle attivazioni di output;
  • Scorrere all'indietro attraverso gli strati, eseguendo la retropropagazione chiamando il metodo backward() di ciascun layer.
  1. Verificare il comportamento dell'addestramento:
  • Se tutto è implementato correttamente, la perdita dovrebbe diminuire costantemente a ogni epoca utilizzando un learning rate di 0.01.

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