Trasformazioni
Trasformazioni dei Tensors
Questa lezione approfondisce le operazioni avanzate di trasformazione dei tensori.
Le trasformazioni dei tensori sono fondamentali nella gestione dei dati. Progredendo nell'apprendimento automatico e nelle attività di data science, diventa evidente che i dati incontrati non sono sempre nel formato desiderato. Questa lezione introduce i metodi in TensorFlow che permettono la manipolazione della struttura e del contenuto dei tensori per soddisfare requisiti specifici.
Rimodellamento dei Tensors
Durante il lavoro con i tensori, a volte è necessario cambiare la forma senza alterare i dati sottostanti. tf.reshape()
è utile in queste situazioni.
Come funziona:
- Il rimodellamento modifica la struttura del tensore, ma non i suoi dati. Il numero totale di elementi prima e dopo il rimodellamento deve rimanere lo stesso;
- Opera "riempiendo" la nuova forma riga per riga (da sinistra a destra, dall'alto verso il basso).
1234567891011121314import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Quando si specifica la nuova forma, una dimensione può essere -1
. TensorFlow calcolerà la dimensione di quella dimensione in modo che la dimensione totale rimanga costante.
Questo è particolarmente utile quando si desidera fornire tensori a una rete neurale ma le dimensioni non corrispondono alla forma di input della rete.
Slicing
Lo slicing consente di recuperare una porzione di un tensore. È analogo allo slicing delle liste in Python ma esteso ai tensori multidimensionali.
Funzionamento:
tf.slice()
estrae una porzione da un tensore. Richiede l'indice di partenza per lo slice e la dimensione dello slice;- Se la dimensione è
-1
, indica tutti gli elementi in quella dimensione.
12345678910111213import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Ricordare sempre l'indicizzazione a partire da zero di TensorFlow, simile all'indicizzazione nativa di Python. Utile per estrarre caratteristiche specifiche o punti dati da un dataset più ampio.
Modifica dei dati
Esiste un altro modo di effettuare slicing che consente anche di modificare i dati originali, in modo simile allo slicing degli array in NumPy.
Funzionamento:
- Utilizzando
[]
, è possibile effettuare facilmente slicing e indicizzazione dei tensori, simile allo slicing di NumPy. Questo metodo consente di selezionare righe, colonne o elementi specifici di un tensore; - Con
tf.Variable()
, il tensore diventa mutabile, permettendo modifiche dirette tramite slicing; - Per modificare i valori del sotto-tensore selezionato, utilizzare il metodo
.assign()
con un tensore o una lista che abbia la stessa forma.
12345678910111213import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
- La sintassi di slicing in TensorFlow è fortemente ispirata a NumPy, quindi se hai familiarità con NumPy, il passaggio al meccanismo di slicing di TensorFlow è immediato;
- Assicurati sempre di utilizzare
tf.Variable()
per tutte le operazioni che richiedono la mutabilità dei tensori.
Concatenazione
La concatenazione consente di unire più tensori lungo un asse specificato.
Come funziona:
tf.concat()
combina i tensori. Il metodo richiede una lista di tensori che si desidera concatenare e l'asse lungo cui eseguire l'operazione;- L'asse è indicizzato da zero. Un asse pari a
0
si riferisce alle righe (verticalmente) e un asse pari a1
si riferisce alle colonne (orizzontalmente).
123456789101112131415161718import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
- Assicurarsi che i tensori da unire abbiano dimensioni corrispondenti sugli assi non concatenati;
- Questa operazione è simile a
numpy.concatenate()
, ma adattata per i tensori di TensorFlow.
Swipe to start coding
Contesto
Stai lavorando su un dataset composto da rilevamenti provenienti da vari sensori posizionati in diverse località geografiche. Questi sensori registrano dati meteorologici come temperatura, pressione e coordinate geografiche normalizzate.
Tuttavia, durante la compilazione dei rilevamenti, hai riscontrato che alcuni dati sono stati registrati in modo errato.
Hai inoltre ricevuto nuovi rilevamenti da altri sensori che devono essere inclusi.
Informazioni sul Dataset
-
main_dataset
: Un tensore di forma(6, 4)
che rappresenta 6 rilevamenti. Ogni riga è un campione e le colonne rappresentano le seguenti caratteristiche:- Temperatura (in Celsius);
- Pressione (in hPa);
- Coordinata di latitudine normalizzata;
- Coordinata di longitudine normalizzata.
-
error_correction_data
: Un tensore di forma(2, 4)
che rappresenta 2 rilevamenti corretti per dati errati nel dataset principale. -
additional_data
: Un tensore di forma(3, 4)
che rappresenta 3 nuovi rilevamenti.
Obiettivo
Preparare un dataset corretto e completo per la previsione meteorologica:
-
Correzione dei dati:
- È stato rilevato che i rilevamenti alla 2ª e 5ª riga di
main_dataset
erano inaccurati. Sostituisci queste righe inmain_dataset
con le righe dierror_correction_data
.
- È stato rilevato che i rilevamenti alla 2ª e 5ª riga di
-
Incorporare dati aggiuntivi:
- Concatenare
main_dataset
conadditional_data
per includere i nuovi rilevamenti.
- Concatenare
-
Rimodellamento in batch:
- Per l'addestramento in batch, suddividere il dataset in batch da 3 rilevamenti ciascuno. Rimodella
complete_dataset
, dove la prima dimensione rappresenta la dimensione del batch e la seconda il numero di rilevamenti per batch.
- Per l'addestramento in batch, suddividere il dataset in batch da 3 rilevamenti ciascuno. Rimodella
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain more about how tf.reshape() works?
What happens if I try to reshape a tensor to an incompatible shape?
Can you give more examples of slicing and modifying tensors?
Awesome!
Completion rate improved to 5.56
Trasformazioni
Scorri per mostrare il menu
Trasformazioni dei Tensors
Questa lezione approfondisce le operazioni avanzate di trasformazione dei tensori.
Le trasformazioni dei tensori sono fondamentali nella gestione dei dati. Progredendo nell'apprendimento automatico e nelle attività di data science, diventa evidente che i dati incontrati non sono sempre nel formato desiderato. Questa lezione introduce i metodi in TensorFlow che permettono la manipolazione della struttura e del contenuto dei tensori per soddisfare requisiti specifici.
Rimodellamento dei Tensors
Durante il lavoro con i tensori, a volte è necessario cambiare la forma senza alterare i dati sottostanti. tf.reshape()
è utile in queste situazioni.
Come funziona:
- Il rimodellamento modifica la struttura del tensore, ma non i suoi dati. Il numero totale di elementi prima e dopo il rimodellamento deve rimanere lo stesso;
- Opera "riempiendo" la nuova forma riga per riga (da sinistra a destra, dall'alto verso il basso).
1234567891011121314import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Quando si specifica la nuova forma, una dimensione può essere -1
. TensorFlow calcolerà la dimensione di quella dimensione in modo che la dimensione totale rimanga costante.
Questo è particolarmente utile quando si desidera fornire tensori a una rete neurale ma le dimensioni non corrispondono alla forma di input della rete.
Slicing
Lo slicing consente di recuperare una porzione di un tensore. È analogo allo slicing delle liste in Python ma esteso ai tensori multidimensionali.
Funzionamento:
tf.slice()
estrae una porzione da un tensore. Richiede l'indice di partenza per lo slice e la dimensione dello slice;- Se la dimensione è
-1
, indica tutti gli elementi in quella dimensione.
12345678910111213import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Ricordare sempre l'indicizzazione a partire da zero di TensorFlow, simile all'indicizzazione nativa di Python. Utile per estrarre caratteristiche specifiche o punti dati da un dataset più ampio.
Modifica dei dati
Esiste un altro modo di effettuare slicing che consente anche di modificare i dati originali, in modo simile allo slicing degli array in NumPy.
Funzionamento:
- Utilizzando
[]
, è possibile effettuare facilmente slicing e indicizzazione dei tensori, simile allo slicing di NumPy. Questo metodo consente di selezionare righe, colonne o elementi specifici di un tensore; - Con
tf.Variable()
, il tensore diventa mutabile, permettendo modifiche dirette tramite slicing; - Per modificare i valori del sotto-tensore selezionato, utilizzare il metodo
.assign()
con un tensore o una lista che abbia la stessa forma.
12345678910111213import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
- La sintassi di slicing in TensorFlow è fortemente ispirata a NumPy, quindi se hai familiarità con NumPy, il passaggio al meccanismo di slicing di TensorFlow è immediato;
- Assicurati sempre di utilizzare
tf.Variable()
per tutte le operazioni che richiedono la mutabilità dei tensori.
Concatenazione
La concatenazione consente di unire più tensori lungo un asse specificato.
Come funziona:
tf.concat()
combina i tensori. Il metodo richiede una lista di tensori che si desidera concatenare e l'asse lungo cui eseguire l'operazione;- L'asse è indicizzato da zero. Un asse pari a
0
si riferisce alle righe (verticalmente) e un asse pari a1
si riferisce alle colonne (orizzontalmente).
123456789101112131415161718import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
- Assicurarsi che i tensori da unire abbiano dimensioni corrispondenti sugli assi non concatenati;
- Questa operazione è simile a
numpy.concatenate()
, ma adattata per i tensori di TensorFlow.
Swipe to start coding
Contesto
Stai lavorando su un dataset composto da rilevamenti provenienti da vari sensori posizionati in diverse località geografiche. Questi sensori registrano dati meteorologici come temperatura, pressione e coordinate geografiche normalizzate.
Tuttavia, durante la compilazione dei rilevamenti, hai riscontrato che alcuni dati sono stati registrati in modo errato.
Hai inoltre ricevuto nuovi rilevamenti da altri sensori che devono essere inclusi.
Informazioni sul Dataset
-
main_dataset
: Un tensore di forma(6, 4)
che rappresenta 6 rilevamenti. Ogni riga è un campione e le colonne rappresentano le seguenti caratteristiche:- Temperatura (in Celsius);
- Pressione (in hPa);
- Coordinata di latitudine normalizzata;
- Coordinata di longitudine normalizzata.
-
error_correction_data
: Un tensore di forma(2, 4)
che rappresenta 2 rilevamenti corretti per dati errati nel dataset principale. -
additional_data
: Un tensore di forma(3, 4)
che rappresenta 3 nuovi rilevamenti.
Obiettivo
Preparare un dataset corretto e completo per la previsione meteorologica:
-
Correzione dei dati:
- È stato rilevato che i rilevamenti alla 2ª e 5ª riga di
main_dataset
erano inaccurati. Sostituisci queste righe inmain_dataset
con le righe dierror_correction_data
.
- È stato rilevato che i rilevamenti alla 2ª e 5ª riga di
-
Incorporare dati aggiuntivi:
- Concatenare
main_dataset
conadditional_data
per includere i nuovi rilevamenti.
- Concatenare
-
Rimodellamento in batch:
- Per l'addestramento in batch, suddividere il dataset in batch da 3 rilevamenti ciascuno. Rimodella
complete_dataset
, dove la prima dimensione rappresenta la dimensione del batch e la seconda il numero di rilevamenti per batch.
- Per l'addestramento in batch, suddividere il dataset in batch da 3 rilevamenti ciascuno. Rimodella
Soluzione
Grazie per i tuoi commenti!
single