Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Trasformazioni | Tensor Operations and Execution
Quizzes & Challenges
Quizzes
Challenges
/
Introduzione a TensorFlow

bookTrasformazioni

Trasformazioni di Tensors

Questa lezione approfondisce le operazioni avanzate di trasformazione dei tensori.

Le trasformazioni dei tensori sono fondamentali nella gestione dei dati. Addentrandosi nelle attività di deep learning e data science, diventa evidente che i dati incontrati non sono sempre nel formato desiderato. Questa lezione introduce i metodi di TensorFlow che consentono 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.

Funzionamento:

  • Il rimodellamento modifica la struttura del tensore, ma non i suoi dati. Il numero totale di elementi prima e dopo il rimodellamento deve rimanere invariato;
  • 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 o punti dati specifici 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 analogo allo slicing degli array in NumPy.

Funzionamento:

  • Utilizzando [], è possibile effettuare facilmente slicing e indicizzazione dei tensori, simile allo slicing di NumPy. Questo metodo permette di selezionare righe, colonne o elementi specifici di un tensore;
  • Con tf.Variable(), il tensore diventa mutabile, consentendo modifiche dirette tramite slicing;
  • Per modificare i valori del sottensore 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 è in gran parte ispirata a NumPy, quindi se hai familiarità con NumPy, il passaggio al meccanismo di slicing di TensorFlow è semplice;
  • Assicurati sempre di utilizzare tf.Variable() per tutte le operazioni che richiedono la mutabilità del tensore.

Concatenazione

La concatenazione consente di unire più tensori lungo un asse specificato.

Funzionamento:

  • tf.concat() combina i tensori. Il metodo richiede una lista di tensori da 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 ai 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 scoperto che alcuni dati sono stati registrati in modo errato.

Hai anche ricevuto nuovi rilevamenti da altri sensori che devi includere.

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. Sostituire 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 con 3 rilevamenti per batch. Rimodellare 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 2. Capitolo 3
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

Awesome!

Completion rate improved to 6.25

bookTrasformazioni

Scorri per mostrare il menu

Trasformazioni di Tensors

Questa lezione approfondisce le operazioni avanzate di trasformazione dei tensori.

Le trasformazioni dei tensori sono fondamentali nella gestione dei dati. Addentrandosi nelle attività di deep learning e data science, diventa evidente che i dati incontrati non sono sempre nel formato desiderato. Questa lezione introduce i metodi di TensorFlow che consentono 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.

Funzionamento:

  • Il rimodellamento modifica la struttura del tensore, ma non i suoi dati. Il numero totale di elementi prima e dopo il rimodellamento deve rimanere invariato;
  • 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 o punti dati specifici 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 analogo allo slicing degli array in NumPy.

Funzionamento:

  • Utilizzando [], è possibile effettuare facilmente slicing e indicizzazione dei tensori, simile allo slicing di NumPy. Questo metodo permette di selezionare righe, colonne o elementi specifici di un tensore;
  • Con tf.Variable(), il tensore diventa mutabile, consentendo modifiche dirette tramite slicing;
  • Per modificare i valori del sottensore 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 è in gran parte ispirata a NumPy, quindi se hai familiarità con NumPy, il passaggio al meccanismo di slicing di TensorFlow è semplice;
  • Assicurati sempre di utilizzare tf.Variable() per tutte le operazioni che richiedono la mutabilità del tensore.

Concatenazione

La concatenazione consente di unire più tensori lungo un asse specificato.

Funzionamento:

  • tf.concat() combina i tensori. Il metodo richiede una lista di tensori da 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 ai 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 scoperto che alcuni dati sono stati registrati in modo errato.

Hai anche ricevuto nuovi rilevamenti da altri sensori che devi includere.

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. Sostituire 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 con 3 rilevamenti per batch. Rimodellare 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 2. Capitolo 3
single

single

some-alt