Cos'รจ TensorFlow? Come funziona? Archistruttura e caratteristiche
โก Riepilogo intelligente
TensorFlow รจ la piattaforma open-source Google Progettato per l'apprendimento automatico, rappresenta ogni calcolo come un grafo di flusso di dati di tensori. Questa panoramica illustra l'architettura, i componenti, il funzionamento di un calcolo e come alimentare una pipeline di input con i dati.

Cos'รจ TensorFlow?
TensorFlow รจ una piattaforma end-to-end open source per la creazione di applicazioni di machine learning. Si tratta di una libreria matematica simbolica che utilizza il flusso di dati e la programmazione differenziabile per eseguire vari compiti incentrati sull'addestramento e sull'inferenza delle reti neurali profonde. Consente agli sviluppatori di creare applicazioni di machine learning utilizzando vari strumenti, librerie e risorse della community.
Attualmente, la libreria di deep learning piรน famosa al mondo รจ GoogleTensorFlow. Google Applica l'apprendimento automatico a tutti i suoi prodotti per migliorare la ricerca, la traduzione, la generazione di didascalie per le immagini e i sistemi di raccomandazione.
Esempio di TensorFlow
Per fare un esempio concreto, Google Gli utenti possono sperimentare un'esperienza di ricerca piรน rapida e raffinata grazie all'IA. Se l'utente digita una parola chiave nella barra di ricerca, Google fornisce un suggerimento su quale potrebbe essere la parola successiva.

Google vuole utilizzare l'apprendimento automatico per sfruttare i suoi enormi set di dati e offrire agli utenti la migliore esperienza possibile. Tre diversi gruppi utilizzano l'apprendimento automatico:
- Ricercatori
- Scienziati dei dati
- I programmatori
Tutti possono utilizzare lo stesso set di strumenti per collaborare tra loro e migliorare la propria efficienza.
Google non solo contiene grandi set di dati, ma esegue anche un'enorme infrastruttura di calcolo, quindi TensorFlow รจ stato costruito per scalare fin dall'inizio. TensorFlow รจ una libreria sviluppata da Google Brain Team accelererร la ricerca sull'apprendimento automatico e sulle reti neurali profonde.
ร stato creato per funzionare su piรน CPU o GPU e persino su sistemi operativi mobili, e ha diversi wrapper in diversi linguaggi come Python, C++ or Java.
Storia di TensorFlow
Un paio di anni fa, il deep learning ha iniziato a superare tutti gli altri algoritmi di machine learning quando si trattava di grandi quantitร di dati. Google ha capito che poteva utilizzare queste reti neurali profonde per migliorare i suoi servizi:
- Gmail
- Foto
- Google motore di ricerca
Hanno costruito un framework chiamato TensorFlow in modo che ricercatori e sviluppatori potessero lavorare sullo stesso modello, per poi implementarlo su una scala utilizzabile da molte persone.
TensorFlow รจ stato rilasciato pubblicamente nel novembre 2015 e la versione 1.0 รจ seguita nel febbraio 2017. Il cambiamento piรน grande รจ arrivato con TensorFlow 2.0 a settembre 2019, che ha reso l'esecuzione eager l'impostazione predefinita e ha adottato Keras come API di alto livello standard. Dalla versione 2.16 in poi, Keras 3 รจ l'impostazione predefinita e lo stesso codice modello puรฒ essere eseguito anche su JAX o PyTorbackend ch.
TensorFlow รจ rilasciato sotto licenza Apache 2.0, quindi รจ possibile utilizzarlo, modificarlo e ridistribuirlo, anche a fini commerciali, senza pagare Google.
Come funziona TensorFlow
TensorFlow ti consente di creare grafici e strutture del flusso di dati per definire il modo in cui i dati si muovono attraverso un grafico prendendo gli input come un array multidimensionale chiamato Tensor. Ti consente di costruire un diagramma di flusso delle operazioni che possono essere eseguite su questi input, che va da un lato e arriva all'altra estremitร come output.
TensorFlow Architectura
L'architettura di TensorFlow si articola in tre parti:
- Preelaborazione dei dati
- Costruisci il modello
- Addestrare e stimare il modello
Si chiama TensorFlow perchรฉ prende input come un array multidimensionale, noto anche come tensori. Puoi costruire una sorta di diagramma di flusso di operazioni (chiamate Grafico) che si desidera eseguire su quell'input. L'input entra da un'estremitร , quindi scorre attraverso questo sistema di operazioni multiple ed esce dall'altra estremitร come output.
Dove puรฒ essere eseguito TensorFlow?
I requisiti hardware e software di TensorFlow si suddividono in due fasi:
Fase di sviluppo: questa รจ la fase in cui si addestra il modello, solitamente su un computer fisso o portatile.
Fase di esecuzione o di inferenzaUna volta completato l'addestramento, il modello puรฒ essere eseguito su diverse piattaforme:
- Desktop in esecuzione Windows, macOS o Linux
- Il cloud come servizio web
- Dispositivi mobili come iOS e Android
Puoi addestrarlo su piรน macchine, quindi puoi eseguirlo su una macchina diversa, una volta ottenuto il modello addestrato.
Il modello puรฒ essere addestrato e utilizzato sia su GPU che su CPU. Le GPU sono state inizialmente progettate per i videogiochi. Intorno al 2009, i ricercatori di Stanford hanno dimostrato che le GPU sono estremamente efficienti nelle operazioni di algebra lineare e matriciale da cui dipendono le reti neurali. Il deep learning si basa su molte moltiplicazioni di matrici. TensorFlow รจ molto veloce nel calcolare la moltiplicazione di matrici perchรฉ รจ scritto in C++. Sebbene sia implementato in C++, TensorFlow รจ accessibile e controllabile principalmente da altri linguaggi, Python.
Un'altra caratteristica significativa รจ Scheda Tensorche visualizza il grafico, le metriche di addestramento e la distribuzione dei pesi durante l'esecuzione del modello.
Componenti di TensorFlow
tensore
Il nome di TensorFlow deriva direttamente dal suo framework principale: tensoreIn TensorFlow, tutti i calcoli coinvolgono tensori. Un tensore รจ un vettore or matrice di n-dimensioni che rappresentano tutti i tipi di dati. Tutti i valori in un tensore contengono un tipo di dati identico con un valore noto (o parzialmente noto) shape. La forma dei dati รจ la dimensionalitร della matrice o dell'array.
Un tensore puรฒ essere originato dai dati di input o dal risultato di un calcolo. In TensorFlow, tutte le operazioni vengono condotte all'interno di a grafico. Il grafico รจ un insieme di calcoli che avvengono successivamente. Ogni operazione รจ chiamata an nodo op e sono collegati tra loro.
Il grafico delinea le operazioni e le connessioni tra i nodi. Tuttavia, non visualizza i valori. Il bordo dei nodi รจ il tensore, cioรจ un modo per popolare l'operazione con i dati.
Grafici
TensorFlow utilizza una struttura grafica. Il grafico raccoglie e descrive tutte le serie di calcoli effettuate durante l'addestramento. Il grafico ha molti vantaggi:
- Funziona su piรน CPU o GPU e persino su sistemi operativi mobili.
- La portabilitร del grafico consente di conservare i calcoli per un uso immediato o successivo. Il grafico puรฒ essere salvato per essere eseguito in futuro.
- Tutti i calcoli nel grafico vengono eseguiti collegando insieme i tensori
- Un grafo รจ costituito da nodi e archi. Ogni nodo rappresenta un'operazione matematica e produce un output, mentre gli archi descrivono le relazioni di input e output tra i nodi. I tensori stessi si muovono lungo gli archi.
Perchรฉ TensorFlow รจ popolare?
TensorFlow รจ ampiamente diffuso perchรฉ accessibile a ogni livello di competenza. Le sue API coprono tutto, da un modello Keras di tre righe a una CNN o RNN costruita manualmente. Poichรฉ il calcolo รจ espresso come un grafo, TensorBoard puรฒ visualizzare la rete e semplificare notevolmente il debug. Inoltre, รจ scalabile e puรฒ essere eseguito su CPU, GPU e TPU, nonchรฉ su dispositivi mobili tramite TensorFlow Lite.
TensorFlow rimane uno dei due framework di deep learning piรน utilizzati su GitHub, insieme a PyTorch.
TensorFlow Algorithms
TensorFlow include stimatori di alto livello per diversi algoritmi classici. In TensorFlow 1.x questi erano gestiti tramite tf.estimator:
- Regressione lineare: tf.estimator.LinearRegressor
- Classificazione: tf.estimator.LinearClassifier
- Classificazione dell'apprendimento profondo: tf.estimator.DNNClassifier
- Apprendimento ampio e approfondito: tf.estimator.DNNLinearCombinedClassifier
- Regressione ad albero potenziata: tf.estimator.BoostedTreesRegressor
- Classificazione degli alberi potenziata: tf.estimator.BoostedTreesClassifier
TensorFlow vs PyTorch: Quale dovresti scegliere?
TensorFlow e PyTorch sono i due framework di deep learning dominanti e le differenze pratiche si sono ridotte considerevolmente da quando TensorFlow 2.0 ha adottato l'esecuzione eager.
| Criteri | TensorFlow | PyTorch |
|---|---|---|
| Sviluppato da | Google Cervello | Meta IA |
| Desideroso, con compilazione grafica opzionale | Desideroso, con compilazione opzionale | |
| API di alto livello | Keras, costruito in | Librerie separate come Lightning |
| Mobile e edge | Maturo, tramite TensorFlow Lite | Migliorare, attraverso l'esecuzioneTorch |
| Implementazione del browser | TensorFlow.js | Richiede la conversione in ONNX |
| Fortezza tipica | Produzione e distribuzione | Ricerca e sperimentazione |
La risposta pragmatica: scegli TensorFlow quando il modello deve essere distribuito su dispositivi mobili, browser o uno stack di server gestito e scegli PyTorquando si itera sull'architettura del modello. Keras 3, il predefinito da TensorFlow 2.16 in poi, attenua ulteriormente la decisione, perchรฉ lo stesso codice Keras puรฒ essere eseguito su un TensorFlow, JAX o PyTorbackend ch.
Come funzionano i calcoli in TensorFlow
โ ๏ธ Nota sulla versione: le procedure guidate seguenti utilizzano il TensorFlow 1.x Lo stile grafico e di sessione, che รจ il modo piรน chiaro per vedere come funziona effettivamente il grafico del flusso di dati. Le funzioni tf.placeholder(), tf.Session() e make_initializable_iterator() sono state rimosse in TensorFlow 2.0. e genererร un AttributeError su un'installazione corrente. La sezione TensorFlow 1.x vs TensorFlow 2.x Piรน avanti si trova l'equivalente moderno di ciascun esempio.
import numpy as np import tensorflow as tf
Nelle prime due righe di codice abbiamo importato tensorflow come tf. Con Python, รจ pratica comune utilizzare un nome breve per una libreria. Il vantaggio รจ quello di evitare di digitare il nome completo della libreria quando dobbiamo utilizzarla. Ad esempio, possiamo importare tensorflow come tf e chiamare tf quando vogliamo utilizzare una funzione tensorflow
Esercitiamoci con il flusso di lavoro elementare di TensorFlow attraverso semplici esempi. Creiamo un grafo computazionale che moltiplica due numeri.
Nell'esempio, moltiplicheremo X_1 e X_2. TensorFlow creerร un nodo per collegare l'operazione. Nel nostro esempio, si chiama "moltiplica". Una volta determinato il grafo, i motori di calcolo di TensorFlow moltiplicheranno X_1 e X_2.
Infine, eseguiremo una sessione TensorFlow che eseguirร il grafico computazionale con i valori di X_1 e X_2 e stamperร il risultato della moltiplicazione.
Definiamo i nodi di input X_1 e X_2. Quando creiamo un nodo in TensorFlow, dobbiamo scegliere il tipo di nodo da creare. I nodi X1 e X2 saranno nodi segnaposto. Il segnaposto assegna un nuovo valore ogni volta che eseguiamo un calcolo. Li creeremo come nodi segnaposto TF.dot.
Passaggio 1: definire la variabile
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Un segnaposto necessita di un tipo di dati. In questo caso si tratta di numeri, quindi tf.float32 รจ la scelta corretta. L'argomento name รจ facoltativo ma utile, perchรฉ rappresenta l'etichetta che appare nella visualizzazione del grafico in TensorBoard. X_2 viene definito allo stesso modo.
Passaggio 2: definire il calcolo
multiply = tf.multiply(X_1, X_2, name = "multiply")
Ora possiamo definire il nodo che esegue l'operazione di moltiplicazione. In TensorFlow possiamo farlo creando un nodo tf.multiply.
Passeremo i nodi X_1 e X_2 al nodo della moltiplicazione. Dice a tensorflow di collegare quei nodi nel grafico computazionale, quindi gli chiediamo di estrarre i valori da xey e moltiplicare il risultato. Diamo anche al nodo della moltiplicazione il nome moltiplicazione. ร l'intera definizione del nostro semplice grafico computazionale.
Passaggio 3: eseguire l'operazione
Per eseguire operazioni sul grafo, dobbiamo creare una sessione. In TensorFlow, questo viene fatto tramite `tf.Session()`. Ora che abbiamo una sessione, possiamo chiedere alla sessione di eseguire operazioni sul nostro grafo computazionale chiamando `session`. Per eseguire il calcolo, dobbiamo usare `run`.
Quando viene eseguita l'operazione di moltiplicazione, sono necessari i valori dei nodi X_1 e X_2, quindi questi vengono forniti in fase di esecuzione. Possiamo farlo tramite un parametro chiamato feed_dict. Passiamo i valori 1, 2, 3 per X_1 e 4, 5, 6 per X_2.
Stampiamo i risultati con print(risultato). Dovremmo vedere 4, 10 e 18 per 1ร4, 2ร5 e 3ร6
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
Opzioni per caricare i dati in TensorFlow
Il primo passo prima dell'allenamento a algoritmo di apprendimento automatico Si tratta di caricare i dati. Esistono due modi comuni per caricare i dati:
1. Caricare i dati in memoria: ร il metodo piรน semplice. Carichi tutti i tuoi dati in memoria come un singolo array. Scrivi in โโchiaro Python per questo; niente di tutto ciรฒ รจ specifico di TensorFlow.
2. Pipeline di dati TensorFlowTensorFlow fornisce un'API integrata che carica i dati, applica le trasformazioni e li fornisce al modello. Questo metodo funziona molto bene, soprattutto quando si ha a che fare con un dataset di grandi dimensioni. Ad esempio, รจ risaputo che i file immagine sono enormi e non rientrano nella memoria disponibile. La pipeline di dati gestisce la memoria in modo autonomo.
Quale soluzione utilizzare?
Caricare i dati in memoria
Se il tuo set di dati non รจ troppo grande, ovvero meno di 10 gigabyte, puoi utilizzare il primo metodo. I dati possono entrare nella memoria. Puoi utilizzare una famosa libreria chiamata Pandas per importare file CSV. Imparerai di piรน sui panda nel prossimo tutorial.
Carica i dati con la pipeline di TensorFlow
Il secondo metodo funziona meglio se si dispone di un set di dati di grandi dimensioni. Ad esempio, se hai un set di dati di 50 gigabyte e il tuo computer ha solo 16 gigabyte di memoria, la macchina si bloccherร .
In questa situazione, รจ necessario creare una pipeline TensorFlow. La pipeline caricherร i dati in batch, ovvero in piccoli blocchi. Ogni batch verrร inviato alla pipeline e sarร pronto per l'addestramento. La creazione di una pipeline รจ un'ottima soluzione perchรฉ consente di utilizzare il calcolo parallelo. Ciรฒ significa che TensorFlow addestrerร il modello su piรน CPU. Questo accelera i calcoli e rende pratico l'addestramento di reti neurali di grandi dimensioni.
In sintesi: carica piccoli set di dati in memoria con pandas e usa una pipeline TensorFlow quando i dati sono grandi o quando desideri un caricamento parallelo su piรน CPU.
Come creare una pipeline TensorFlow
Ecco i passaggi per creare una pipeline TensorFlow:
Nell'esempio precedente, abbiamo aggiunto manualmente tre valori per X_1 e X_2. Ora vedremo come caricare i dati in TensorFlow:
Passaggio 1) Creare i dati
Prima di tutto, utilizziamo la libreria Numpy per generare due valori casuali.
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
[[0.8835775 0.23766977]]
Passaggio 2) Crea il segnaposto
Come nell'esempio precedente, creiamo un segnaposto con il nome X. Dobbiamo specificare esplicitamente la forma del tensore. Nel caso, caricheremo un array con solo due valori. Possiamo scrivere la forma come shape=[1,2]
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
Passaggio 3) Definire il metodo del set di dati
Successivamente, dobbiamo definire il Dataset in cui possiamo popolare il valore del segnaposto x. Dobbiamo utilizzare il metodo tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)
Passaggio 4) Creare la pipeline
Nel passaggio quattro, dobbiamo inizializzare la pipeline in cui fluiranno i dati. Dobbiamo creare un iteratore con make_initializable_iterator. Lo chiameremo iteratore. Quindi dobbiamo chiamare questo iteratore per alimentare il successivo batch di dati, get_next. Chiameremo questo passaggio get_next. Tieni presente che nel nostro esempio รจ presente un solo batch di dati con solo due valori.
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
Passaggio 5) Eseguire l'operazione
L'ultimo passaggio รจ simile all'esempio precedente. Avviamo una sessione ed eseguiamo l'iteratore dell'operazione. Alimentiamo feed_dict con il valore generato da numpy. Questi due valori popoleranno il segnaposto x. Quindi eseguiamo get_next per stampare il risultato.
with tf.Session() as sess:
# feed the placeholder with data
sess.run(iterator.initializer, feed_dict={ x: x_input })
print(sess.run(get_next))
[0.8835775 0.23766978]
TensorFlow 1.x vs TensorFlow 2.x: cosa รจ cambiato?
TensorFlow 2.0 ha rappresentato una riscrittura radicale dell'API rivolta all'utente. Comprendere la differenza รจ importante, perchรฉ una grande quantitร di codice tutorial online, inclusi gli esempi sopra riportati, si basa sullo stile della versione 1.x.
| Idea | TensorFlow 1.x | TensorFlow 2.x |
|---|---|---|
| Modello di esecuzione | Definisci il grafico, quindi eseguilo | Per impostazione predefinita, le operazioni vengono eseguite immediatamente |
| Dati di alimentazione | tf.placeholder piรน feed_dict | Passare Python valori o tensori direttamente |
| Operazioni in corso | tf.Session().run() | Richiama la funzione, non รจ necessaria alcuna sessione |
| API di alto livello | tf.estimator | Keras, tf.keras |
| Ottimizzazione del grafico | Sempre basato su grafici | Attivalo con il decoratore @tf.function |
| Iterazione di un set di dati | make_initializable_iterator() | pianura Python ciclo for sul set di dati |
L'esempio della moltiplicazione, riscritto. Tre passaggi e una sessione diventano una sola riga, perchรฉ l'operazione viene eseguita nel momento stesso in cui viene richiamata:
import tensorflow as tf X_1 = tf.constant([1, 2, 3], dtype=tf.float32) X_2 = tf.constant([4, 5, 6], dtype=tf.float32) result = tf.multiply(X_1, X_2, name="multiply") print(result.numpy()) # [ 4. 10. 18.]
La pipeline di input, riscritta. Non sono necessari nรฉ segnaposto nรฉ oggetto iteratore:
import numpy as np import tensorflow as tf x_input = np.random.sample((1, 2)) dataset = tf.data.Dataset.from_tensor_slices(x_input) for batch in dataset: print(batch.numpy())
Se hai bisogno della velocitร di un grafico compilato, racchiudi la funzione in @tf.function e TensorFlow traclo converte automaticamente in uno. Gli script legacy 1.x possono anche essere eseguiti senza modifiche tramite lo spazio dei nomi tf.compat.v1, sebbene tale percorso sia destinato esclusivamente alla manutenzione e non debba essere utilizzato per nuovi progetti.
TensorFlow: Punti chiave e Code Referenze
- Significato di TensorFlow: TensorFlow รจ la libreria di deep learning piรน famosa degli ultimi anni. Un professionista che utilizza TensorFlow puรฒ costruire qualsiasi struttura di deep learning, come CNN, RNN o una semplice rete neurale artificiale.
- TensorFlow รจ utilizzato principalmente da accademici, startup e grandi aziende. Google utilizza TensorFlow in quasi tutti i casi Google prodotti di uso quotidiano tra cui Gmail, Foto e Google Motore di ricerca.
- Migliori Google Il team di Brain ha sviluppato TensorFlow per colmare il divario tra ricercatori e sviluppatori di prodotti. Nel 2015, TensorFlow รจ stato reso pubblico e sta rapidamente guadagnando popolaritร . Oggi, TensorFlow รจ la libreria di deep learning con il maggior numero di repository su GitHub.
- I professionisti utilizzano TensorFlow perchรฉ si distribuisce facilmente su larga scala, nel cloud, nel browser o su dispositivi mobili con sistema operativo iOS e Android.
TensorFlow funziona in sessioni. Ogni sessione รจ definita da un grafo con calcoli diversi. Un semplice esempio puรฒ essere la moltiplicazione di un numero. In TensorFlow, sono necessari tre passaggi:
- Definisci la variabile
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- Definire il calcolo
multiply = tf.multiply(X_1, X_2, name = "multiply")
- Eseguire l'operazione
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1: [1, 2, 3], X_2: [4, 5, 6]})
print(result)
Una pratica comune in TensorFlow รจ quella di creare una pipeline per caricare i dati. Seguendo questi cinque passaggi, sarai in grado di caricare i dati in TensorFlow:
- Creare i dati
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
- Crea il segnaposto
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Definire il metodo del set di dati
dataset = tf.data.Dataset.from_tensor_slices(x)
- Crea la pipeline
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Esegui il programma
with tf.Session() as sess:
sess.run(iterator.initializer, feed_dict={x: x_input})
print(sess.run(get_next))
