Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Nastro dei Gradienti | Basi di TensorFlow
Introduzione a TensorFlow

Nastro dei Gradienti

Gradient Tape

La comprensione delle operazioni fondamentali sui tensori consente di passare all'ottimizzazione e all'accelerazione di questi processi utilizzando le funzionalità integrate di TensorFlow. Il primo di questi strumenti avanzati da esplorare è il Gradient Tape.

Cos'è il Gradient Tape?

Questo capitolo approfondisce uno dei concetti fondamentali di TensorFlow, il Gradient Tape. Questa funzionalità è essenziale per comprendere e implementare le tecniche di ottimizzazione basate sul gradiente, in particolare nell'ambito del deep learning.

Gradient Tape in TensorFlow è uno strumento che registra le operazioni per la differenziazione automatica. Quando le operazioni vengono eseguite all'interno di un blocco Gradient Tape, TensorFlow tiene traccia di tutti i calcoli effettuati. Questo è particolarmente utile nell'addestramento dei modelli di machine learning, dove sono necessari i gradienti per ottimizzare i parametri del modello.

Note
Nota

Fondamentalmente, un gradiente è un insieme di derivate parziali.

Utilizzo di Gradient Tape

Per utilizzare Gradient Tape, seguire questi passaggi:

  • Creare un blocco Gradient Tape: utilizzare with tf.GradientTape() as tape:. All'interno di questo blocco, tutti i calcoli vengono tracciati;
  • Definire i calcoli: eseguire operazioni con i tensori all'interno del blocco (ad esempio, definire un passaggio in avanti di una rete neurale);
  • Calcolare i gradienti: utilizzare tape.gradient(target, sources) per calcolare i gradienti del target rispetto alle sorgenti.

Calcolo semplice del gradiente

Un esempio semplice per comprendere meglio questo concetto.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Questo codice calcola il gradiente di y = x^2 in x = 3. Questo equivale alla derivata parziale di y rispetto a x.

derivata_semplice

Derivate parziali multiple

Quando l'output è influenzato da più input, è possibile calcolare una derivata parziale rispetto a ciascuno di questi input (o solo ad alcuni selezionati). Questo si ottiene fornendo un elenco di variabili come parametro sources.

L'output di questa operazione sarà un corrispondente elenco di tensori, dove ciascun tensore rappresenta la derivata parziale rispetto a ciascuna delle variabili specificate in sources.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Questo codice calcola il gradiente della funzione y = sum(x^2 + 2*z) per valori dati di x e z. In questo esempio, il gradiente di x è mostrato come un tensore 2D, dove ogni elemento corrisponde alla derivata parziale del rispettivo valore nella matrice originale x.

derivate_parziali
Descrizione dell'esempio
expand arrow

Calcolo del gradiente rispetto a x

Quando calcoliamo la derivata di y rispetto a x, stiamo essenzialmente chiedendo: "Se cambiamo leggermente il valore di x, di quanto cambia y?" L'operazione su x è l'elevamento al quadrato (x^2), quindi la derivata ci dice che per ogni incremento unitario di x, y aumenterà di 2*x.

Poiché tutti gli elementi di x sono 3.0:

  • Il gradiente di ciascun elemento è 2*3.0 = 6.0;
  • La matrice del gradiente rispetto a x ha la stessa forma di x (2x3), dove ogni elemento è 6.0. Questo indica che aumentando qualsiasi elemento di x di 1, y aumenterebbe di 6 unità.

Calcolo del gradiente rispetto a z

Per z, consideriamo come le variazioni di z influenzano y. Poiché z viene aggiunto a ciascun elemento al quadrato di x (dopo il raddoppio), stiamo effettivamente chiedendo: "Se z aumenta di 1, di quanto aumenta y?" Secondo le regole del broadcasting, 2*z viene aggiunto a ciascun elemento di x^2, come se avessimo una matrice della stessa dimensione di x, riempita con 2*z.

  • L'operazione di 2*z rispetto a z è diretta: la sua derivata è 2 perché 2*z cambia di 2 unità per ogni variazione unitaria di z;
  • Tuttavia, poiché questa operazione interessa ogni elemento della matrice x, la variazione totale di y per una variazione unitaria di z è 2 volte il numero di elementi di x (che è 6, dalla matrice 2x3). Quindi, il gradiente totale rispetto a z è 2*6 = 12. Questo significa che aumentando z di 1 unità, y aumenta di 12 unità, riflettendo l'effetto combinato della variazione su tutti gli elementi di x.

In sintesi

  • Il gradiente rispetto a x è una matrice che mostra come un incremento unitario di qualsiasi elemento di x porta a un aumento di 6 unità in y, riflettendo la relazione diretta tra le variazioni di x e quelle di y;
  • Il gradiente rispetto a z è uno scalare (12), che mostra l'effetto totale di un incremento unitario di z su y, tenendo conto dell'impatto sull'intera matrice x.
Note
Nota

Per ulteriori approfondimenti sulle funzionalità di Gradient Tape, inclusi derivati di ordine superiore ed estrazione della matrice Jacobiana, consultare la TensorFlow documentation.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2
single

single

Nastro dei Gradienti

Scorri per mostrare il menu

Gradient Tape

La comprensione delle operazioni fondamentali sui tensori consente di passare all'ottimizzazione e all'accelerazione di questi processi utilizzando le funzionalità integrate di TensorFlow. Il primo di questi strumenti avanzati da esplorare è il Gradient Tape.

Cos'è il Gradient Tape?

Questo capitolo approfondisce uno dei concetti fondamentali di TensorFlow, il Gradient Tape. Questa funzionalità è essenziale per comprendere e implementare le tecniche di ottimizzazione basate sul gradiente, in particolare nell'ambito del deep learning.

Gradient Tape in TensorFlow è uno strumento che registra le operazioni per la differenziazione automatica. Quando le operazioni vengono eseguite all'interno di un blocco Gradient Tape, TensorFlow tiene traccia di tutti i calcoli effettuati. Questo è particolarmente utile nell'addestramento dei modelli di machine learning, dove sono necessari i gradienti per ottimizzare i parametri del modello.

Note
Nota

Fondamentalmente, un gradiente è un insieme di derivate parziali.

Utilizzo di Gradient Tape

Per utilizzare Gradient Tape, seguire questi passaggi:

  • Creare un blocco Gradient Tape: utilizzare with tf.GradientTape() as tape:. All'interno di questo blocco, tutti i calcoli vengono tracciati;
  • Definire i calcoli: eseguire operazioni con i tensori all'interno del blocco (ad esempio, definire un passaggio in avanti di una rete neurale);
  • Calcolare i gradienti: utilizzare tape.gradient(target, sources) per calcolare i gradienti del target rispetto alle sorgenti.

Calcolo semplice del gradiente

Un esempio semplice per comprendere meglio questo concetto.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Questo codice calcola il gradiente di y = x^2 in x = 3. Questo equivale alla derivata parziale di y rispetto a x.

derivata_semplice

Derivate parziali multiple

Quando l'output è influenzato da più input, è possibile calcolare una derivata parziale rispetto a ciascuno di questi input (o solo ad alcuni selezionati). Questo si ottiene fornendo un elenco di variabili come parametro sources.

L'output di questa operazione sarà un corrispondente elenco di tensori, dove ciascun tensore rappresenta la derivata parziale rispetto a ciascuna delle variabili specificate in sources.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Questo codice calcola il gradiente della funzione y = sum(x^2 + 2*z) per valori dati di x e z. In questo esempio, il gradiente di x è mostrato come un tensore 2D, dove ogni elemento corrisponde alla derivata parziale del rispettivo valore nella matrice originale x.

derivate_parziali
Descrizione dell'esempio
expand arrow

Calcolo del gradiente rispetto a x

Quando calcoliamo la derivata di y rispetto a x, stiamo essenzialmente chiedendo: "Se cambiamo leggermente il valore di x, di quanto cambia y?" L'operazione su x è l'elevamento al quadrato (x^2), quindi la derivata ci dice che per ogni incremento unitario di x, y aumenterà di 2*x.

Poiché tutti gli elementi di x sono 3.0:

  • Il gradiente di ciascun elemento è 2*3.0 = 6.0;
  • La matrice del gradiente rispetto a x ha la stessa forma di x (2x3), dove ogni elemento è 6.0. Questo indica che aumentando qualsiasi elemento di x di 1, y aumenterebbe di 6 unità.

Calcolo del gradiente rispetto a z

Per z, consideriamo come le variazioni di z influenzano y. Poiché z viene aggiunto a ciascun elemento al quadrato di x (dopo il raddoppio), stiamo effettivamente chiedendo: "Se z aumenta di 1, di quanto aumenta y?" Secondo le regole del broadcasting, 2*z viene aggiunto a ciascun elemento di x^2, come se avessimo una matrice della stessa dimensione di x, riempita con 2*z.

  • L'operazione di 2*z rispetto a z è diretta: la sua derivata è 2 perché 2*z cambia di 2 unità per ogni variazione unitaria di z;
  • Tuttavia, poiché questa operazione interessa ogni elemento della matrice x, la variazione totale di y per una variazione unitaria di z è 2 volte il numero di elementi di x (che è 6, dalla matrice 2x3). Quindi, il gradiente totale rispetto a z è 2*6 = 12. Questo significa che aumentando z di 1 unità, y aumenta di 12 unità, riflettendo l'effetto combinato della variazione su tutti gli elementi di x.

In sintesi

  • Il gradiente rispetto a x è una matrice che mostra come un incremento unitario di qualsiasi elemento di x porta a un aumento di 6 unità in y, riflettendo la relazione diretta tra le variazioni di x e quelle di y;
  • Il gradiente rispetto a z è uno scalare (12), che mostra l'effetto totale di un incremento unitario di z su y, tenendo conto dell'impatto sull'intera matrice x.
Note
Nota

Per ulteriori approfondimenti sulle funzionalità di Gradient Tape, inclusi derivati di ordine superiore ed estrazione della matrice Jacobiana, consultare la TensorFlow documentation.

Compito

Scorri per iniziare a programmare

L'obiettivo è calcolare il gradiente (derivata) di una funzione matematica data in un punto specificato utilizzando il Gradient Tape di TensorFlow. Verranno forniti la funzione e il punto, e vedrai come utilizzare TensorFlow per trovare il gradiente in quel punto.

Considera una funzione quadratica di una sola variabile x, definita come:

f(x) = x^2 + 2x - 1

Il tuo compito è calcolare la derivata di questa funzione in x = 2.

Passaggi

  1. Definire la variabile x nel punto in cui si desidera calcolare la derivata.
  2. Utilizzare Gradient Tape per registrare il calcolo della funzione f(x).
  3. Calcolare il gradiente di f(x) nel punto specificato.

Nota

Il gradiente può essere calcolato solo per valori di tipo floating-point.

Derivative of a Function at a Point

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