Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implementazione delle Reti Neurali | Basi di TensorFlow
Introduzione a TensorFlow
Sezione 3. Capitolo 4
single

single

Implementazione delle Reti Neurali

Scorri per mostrare il menu

Panoramica di una Rete Neurale di Base

Hai ora raggiunto una fase in cui possiedi le conoscenze essenziali di TensorFlow per creare reti neurali in autonomia. Sebbene la maggior parte delle reti neurali reali sia complessa e solitamente sviluppata utilizzando librerie di alto livello come Keras, costruiremo una rete di base utilizzando strumenti fondamentali di TensorFlow. Questo approccio offre un'esperienza pratica con la manipolazione a basso livello dei tensori, aiutandoci a comprendere i processi sottostanti.

Nei corsi precedenti come Introduction to Neural Networks, potresti ricordare il tempo e lo sforzo necessari per costruire anche una semplice rete neurale, gestendo ogni neurone singolarmente.

single_neuron_calc

TensorFlow semplifica notevolmente questo processo. Sfruttando i tensori, è possibile racchiudere calcoli complessi, riducendo la necessità di una programmazione intricata. Il nostro compito principale è impostare una pipeline sequenziale di operazioni sui tensori.

Ecco un breve riepilogo dei passaggi per avviare il processo di training di una rete neurale:

Preparazione dei dati e creazione del modello

La fase iniziale dell'addestramento di una rete neurale comprende la preparazione dei dati, che include sia gli input che gli output da cui la rete apprenderà. Inoltre, vengono definiti gli iperparametri del modello: questi sono i parametri che rimangono costanti durante tutto il processo di addestramento. I pesi vengono inizializzati, solitamente estratti da una distribuzione normale, e i bias, che spesso sono impostati a zero.

Propagazione in avanti

Nella propagazione in avanti, ogni strato della rete segue tipicamente questi passaggi:

  1. Moltiplicare l'input dello strato per i suoi pesi.
  2. Aggiungere un bias al risultato.
  3. Applicare una funzione di attivazione a questa somma.
carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img

Successivamente, è possibile calcolare la loss.

Propagazione all'indietro

Il passo successivo è la propagazione all'indietro, in cui si aggiustano i pesi e i bias in base alla loro influenza sulla loss. Questa influenza è rappresentata dal gradiente, che viene calcolato automaticamente dal Gradient Tape di TensorFlow. I pesi e i bias vengono aggiornati sottraendo il gradiente, scalato per il learning rate.

carousel-imgcarousel-imgcarousel-img

Ciclo di Addestramento

Per addestrare efficacemente la rete neurale, i passaggi di addestramento vengono ripetuti più volte monitorando le prestazioni del modello. Idealmente, la loss dovrebbe diminuire con le epoche.

Compito

Scorri per iniziare a programmare

Crea una rete neurale progettata per prevedere i risultati dell'operazione XOR. La rete deve essere composta da 2 neuroni di input, uno strato nascosto con 2 neuroni e 1 neurone di output.

  1. Inizia impostando i pesi e i bias iniziali. I pesi devono essere inizializzati utilizzando una distribuzione normale, mentre tutti i bias devono essere inizializzati a zero. Utilizza gli iperparametri input_size, hidden_size e output_size per definire le forme appropriate di questi tensori.
  2. Utilizza un decoratore di funzione per trasformare la funzione train_step() in un grafo TensorFlow.
  3. Esegui la propagazione in avanti sia attraverso lo strato nascosto che quello di output della rete. Utilizza la funzione di attivazione sigmoid.
  4. Determina i gradienti per comprendere come ciascun peso e bias influisce sulla perdita. Assicurati che i gradienti vengano calcolati nell'ordine corretto, corrispondente ai nomi delle variabili di output.
  5. Modifica i pesi e i bias in base ai rispettivi gradienti. Integra il learning_rate in questo processo di aggiornamento per controllare l'entità di ciascun aggiornamento.

Soluzione

Descrizione del Codice
expand arrow

Preparazione dei Dati

  • X_data: questi sono i dati di input per la funzione XOR. È un array NumPy di forma (4, 2), che rappresenta le quattro possibili combinazioni degli input XOR (0,0), (0,1), (1,0) e (1,1);
  • Y_data: questo è l'output target per ogni combinazione di input in X_data. È anch'esso un array NumPy ma di forma (4, 1), che rappresenta l'output XOR per ogni coppia di input.

Parametri della Rete

  • input_size: la dimensione dello strato di input, impostata a 2, corrispondente ai due nodi di input (per i due input della funzione XOR);
  • hidden_size: la dimensione dello strato nascosto, anch'essa impostata a 2. Questa scelta è in parte arbitraria ma sufficiente per apprendere la funzione XOR;
  • output_size: la dimensione dello strato di output, impostata a 1, corrispondente al singolo nodo di output (il risultato dell'operazione XOR);
  • learning_rate: il tasso di apprendimento per l'algoritmo di ottimizzazione, che controlla quanto vengono aggiornati i pesi durante l'addestramento.

Pesi e Bias

  • W1 e b1: i pesi (W1) e i bias (b1) per le connessioni dallo strato di input allo strato nascosto. W1 è una variabile TensorFlow inizializzata con valori casuali e ha una forma di (input_size, hidden_size), cioè (2, 2). b1 è una variabile TensorFlow inizializzata a zeri e ha una forma di (hidden_size), cioè (2);
  • W2 e b2: i pesi (W2) e i bias (b2) per le connessioni dallo strato nascosto allo strato di output. W2 è inizializzato con valori casuali e ha una forma di (hidden_size, output_size), cioè (2, 1). b2 è inizializzato a zeri e ha una forma di (output_size), cioè (1).

Funzione di Addestramento

  • train_step(): questa è la funzione principale di addestramento. Utilizza tf.GradientTape() per la differenziazione automatica. Nel passaggio forward, calcola le attivazioni dello strato nascosto (a1) e le predizioni di output (Y_pred). La loss viene calcolata come Mean Squared Error tra Y_pred e Y. La funzione quindi calcola i gradienti e aggiorna pesi e bias;
  • tf.sigmoid(): viene utilizzata una funzione di attivazione sigmoid, che trasforma l'input in un valore compreso tra 0 e 1. Questa viene usata sia per lo strato nascosto che per quello di output.

Ciclo di Addestramento

  • La rete viene addestrata per 2500 epoche. In ogni epoca viene chiamata la funzione train_step() e i pesi vengono aggiornati. La loss viene stampata ogni 500 epoche per monitorare l'andamento dell'addestramento.

Conclusione

Poiché la funzione XOR è un compito relativamente semplice, in questa fase non sono necessarie tecniche avanzate come la regolazione degli iperparametri, la suddivisione del dataset o la creazione di pipeline dati complesse. Questo esercizio rappresenta solo un passo verso la costruzione di reti neurali più sofisticate per applicazioni reali.

La padronanza di queste basi è fondamentale prima di affrontare tecniche avanzate di costruzione di reti neurali nei prossimi corsi, dove verrà utilizzata la libreria Keras ed esplorati metodi per migliorare la qualità del modello grazie alle ricche funzionalità di TensorFlow.

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 3. Capitolo 4
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

some-alt