Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Trasformazioni | Tensori
Introduzione a TensorFlow

bookTrasformazioni

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).
1234567891011121314
import 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)
copy
Note
Nota

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.
12345678910111213
import 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)
copy
Note
Nota

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.
12345678910111213
import 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)
copy
Note
Nota
  • 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 a 1 si riferisce alle colonne (orizzontalmente).
123456789101112131415161718
import 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)
copy
Note
Nota
  • 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.
Compito

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

  1. 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.
  2. error_correction_data: Un tensore di forma (2, 4) che rappresenta 2 rilevamenti corretti per dati errati nel dataset principale.

  3. additional_data: Un tensore di forma (3, 4) che rappresenta 3 nuovi rilevamenti.

Obiettivo

Preparare un dataset corretto e completo per la previsione meteorologica:

  1. Correzione dei dati:

    • È stato rilevato che i rilevamenti alla 2ª e 5ª riga di main_dataset erano inaccurati. Sostituisci queste righe in main_dataset con le righe di error_correction_data.
  2. Incorporare dati aggiuntivi:

    • Concatenare main_dataset con additional_data per includere i nuovi rilevamenti.
  3. 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.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 11
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

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 5.56

bookTrasformazioni

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).
1234567891011121314
import 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)
copy
Note
Nota

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.
12345678910111213
import 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)
copy
Note
Nota

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.
12345678910111213
import 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)
copy
Note
Nota
  • 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 a 1 si riferisce alle colonne (orizzontalmente).
123456789101112131415161718
import 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)
copy
Note
Nota
  • 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.
Compito

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

  1. 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.
  2. error_correction_data: Un tensore di forma (2, 4) che rappresenta 2 rilevamenti corretti per dati errati nel dataset principale.

  3. additional_data: Un tensore di forma (3, 4) che rappresenta 3 nuovi rilevamenti.

Obiettivo

Preparare un dataset corretto e completo per la previsione meteorologica:

  1. Correzione dei dati:

    • È stato rilevato che i rilevamenti alla 2ª e 5ª riga di main_dataset erano inaccurati. Sostituisci queste righe in main_dataset con le righe di error_correction_data.
  2. Incorporare dati aggiuntivi:

    • Concatenare main_dataset con additional_data per includere i nuovi rilevamenti.
  3. 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.

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 1. Capitolo 11
single

single

some-alt