TensorFlow™ su Databricks
I segnaposti
Finora abbiamo usato le Variabili
per gestire i dati, ma esiste una struttura più semplice, i segnaposto
. Un segnaposto
è semplicemente una variabile alla quale verranno assegnati i dati in un momento successivo. In questo modo è possibile creare le operazioni e costruire il grafo computazionale senza bisogno dei dati. Usando la terminologia di TensorFlow
, procediamo poi al feed dei dati nel grafo attraverso i segnaposti.
Questo esempio è leggermente diverso da quelli precedenti, analizziamolo nel dettaglio.
Come prima cosa, importiamo TensorFlow
come di consueto. Quindi creiamo un segnaposto
chiamato x
, cioè una locazione nella memoria in cui andremo successivamente a memorizzare un valore.
Creiamo poi un Tensor chiamato, ottenuto moltiplicando x
per 2. Da notare che non abbiamo ancora definito alcun valore iniziale per x
.
A questo punto abbiamo un'operazione (y
) definita e la possiamo eseguire in una sessione. Creiamo un oggetto di sessione e poi eseguiamo solamente la variabile y
. Questo significa che, se abbiamo definito un grafo di operazioni molto più grande, possiamo eseguire solo una piccola porzione del grafo stesso. Questo sottografo è uno dei punti di forza di TensorFlow perché in molte libre che svolgono compiti simili non è disponibile.
Per eseguire y
bisogna conoscere i valori di x
, che vengono definiti nell'argomento feed_dict
per essere eseguiti
. Qui dichiariamo che i valori di x
sono [1, 2, 3]
. Eseguiamo y
ottenendo come risultato [2, 4, 6]
.
I segnaposti non devono essere dimensionati staticamente. Aggiorniamo il programma affinché x possa avere qualsiasi lunghezza. Cambiamo la definizione di x
in:
Ora, quando definiamo i valori di x
in feed_dict
, possiamo avere un numero di valori qualsiasi. Il codice dovrebbe funzionare ancora e dare lo stesso risultato, ma ora funzionerà anche con qualsiasi numero di valori in feed_dict
.
I segnaposti possono avere anche più dimensioni, consentendo di memorizzare array (matrici). Nell'esempio seguente creiamo una matrice 3x2 e memorizziamo alcuni numeri al suo interno, poi usiamo la stessa operazione precedente per raddoppiare i numeri, elemento per elemento.
La prima dimensione del segnaposto è None
, a indicare che possiamo avere un numero qualsiasi di righe. La seconda dimensione è fissata a 3, a indicare che ogni riga deve avere tre colonne di dati.
Possiamo estendere la matrice per prevedere qualsiasi numero di dimensioni None
. In questo esempio carichiamo l'immagine della lezione precedente, quindi creiamo un segnaposto che memorizza una porzione dell'immagine. La porzione è un segmento 2D dell'immagine, ma ogni "pixel" ha tre componenti (rosso, verde e blu). Pertanto ci servirà None
per le prime due dimensioni e 3
(ma andrebbe bene anche None
) per l'ultima dimensione. Utilizziamo quindi il metodo slice
di TensorFlow per estrarre dall'immagine un sottosegmento su cui lavorare.
- Dai un'occhiata a tutte le altre funzioni per matrici disponibili in TensorFlow consultando la documentazione ufficiale.
- Suddividi l'immagine in quattro "angoli", quindi ricomponila.
- Converti l'immagine in scala di grigi. Per farlo puoi estrarre un unico canale di colore e visualizzarlo. Un altro modo è prendere la media dei tre canali come colore grigio.