Cos'è TensorFlow? Come funziona? Introduzione & Architectura
Iniziamo questo tutorial con l'introduzione di TensorFlow:
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 è TensorFlow di Google. Il prodotto Google utilizza l'apprendimento automatico in tutti i suoi prodotti per migliorare il motore di ricerca, la traduzione, i sottotitoli delle immagini o i consigli.
Esempio di TensorFlow
Per fare un esempio concreto, gli utenti di Google possono sperimentare un’esperienza di ricerca più rapida e raffinata con l’intelligenza artificiale. Se l'utente digita una parola chiave nella barra di ricerca, Google fornisce un consiglio 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. 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 dispone solo di dati; hanno il computer più grande del mondo, quindi Tensor Flow è stato costruito per essere scalabile. TensorFlow è una libreria sviluppata dal Google Brain Team per accelerare l'apprendimento automatico e la ricerca 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 sovraperformare tutti gli altri algoritmi di machine learning nel fornire enormi quantità di dati. Google ha visto che potrebbe utilizzare queste reti neurali profonde per migliorare i propri servizi:
- Gmail
- Foto
- Motore di ricerca di Google
Costruiscono un quadro chiamato tensorflow per consentire a ricercatori e sviluppatori di lavorare insieme su un modello di intelligenza artificiale. Una volta sviluppato e scalato, consente a molte persone di utilizzarlo.
È stato reso pubblico per la prima volta alla fine del 2015, mentre la prima versione stabile è apparsa nel 2017. È open source con licenza Apache Open Source. Puoi usarlo, modificarlo e ridistribuire la versione modificata a pagamento senza pagare nulla a Google.
Nel prossimo tutorial sul deep learning di TensorFlow, apprenderemo l'architettura di TensorFlow e come funziona.
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 funziona in tre parti:
- Preelaborazione dei dati
- Costruisci il modello
- Addestrare e stimare il modello
Si chiama Tensorflow perché accetta l'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.
Questo è il motivo per cui si chiama TensorFlow perché il tensore entra, scorre attraverso un elenco di operazioni e poi esce dall'altra parte.
Dove può essere eseguito Tensorflow?
Hardware TensorFlow e requisiti software può essere classificato in
Fase di sviluppo: è il momento in cui alleni la modalità. La formazione viene solitamente eseguita sul desktop o sul laptop.
Fase di esecuzione o fase di inferenza: una volta terminato l'addestramento, Tensorflow può essere eseguito su molte piattaforme diverse. Puoi eseguirlo
- 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 su GPU e CPU. Le GPU sono state inizialmente progettate per i videogiochi. Verso la fine del 2010, i ricercatori di Stanford hanno scoperto che le GPU erano anche molto brave nelle operazioni con le matrici e nell'algebra, il che le rende molto veloci nell'eseguire questo tipo di calcoli. 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.
Infine, una caratteristica significativa di TensorFlow è TensorBoard. IL Scheda Tensor consente di monitorare graficamente e visivamente ciò che sta facendo TensorFlow.
Componenti di TensorFlow
tensore
Il nome di Tensorflow deriva direttamente dal suo framework principale: tensore. In Tensorflow, tutti i calcoli coinvolgono tensori. Un tensore è a 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) forma. 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:
- È stato fatto per funzionare 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 tensore ha un nodo e un arco. Il nodo esegue l'operazione matematica e produce output di endpoint. I bordi i bordi spiegano le relazioni input/output tra i nodi.
Perché TensorFlow è popolare?
TensorFlow è la migliore libreria di tutte perché è stata creata per essere accessibile a tutti. La libreria Tensorflow incorpora diverse API per costruire su larga scala un'architettura di apprendimento profondo come CNN o RNN. TensorFlow si basa sul calcolo grafico; consente allo sviluppatore di visualizzare la costruzione della rete neurale con Tensorboad. Questo strumento è utile per il debug del programma. Infine, Tensorflow è stato creato per essere distribuito su larga scala. Funziona su CPU e GPU.
Tensorflow attira la maggiore popolarità su GitHub rispetto agli altri framework di deep learning.
TensorFlow Algorithms
Di seguito sono riportati gli algoritmi supportati da TensorFlow:
Attualmente, TensorFlow 1.10 dispone di un'API integrata per:
- Regressione lineare: tf.estimator.LinearRegressor
- Classificazione: tf.estimator.LinearClassifier
- Classificazione dell'apprendimento profondo: tf.estimator.DNNClassifier
- Cancellazione e profondità dell'apprendimento profondo: tf.estimator.DNNLinearCombinedClassifier
- Regressione dell'albero di richiamo: tf.estimator.BoostedTreesRegressor
- Classificazione degli alberi potenziata: tf.estimator.BoostedTreesClassifier
Come funzionano i calcoli in TensorFlow
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
Mettiamo in pratica il flusso di lavoro elementare di Tensorflow con semplici esempi di TensorFlow. Creiamo un grafico computazionale che moltiplica due numeri insieme.
Durante l'esempio moltiplicheremo X_1 e X_2 insieme. Tensorflow creerà un nodo per connettere l'operazione. Nel nostro esempio, si chiama moltiplicare. Una volta determinato il grafico, i motori computazionali di Tensorflow moltiplicheranno insieme 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 che tipo di nodo creare. I nodi X1 e X2 saranno un nodo segnaposto. Il segnaposto assegna un nuovo valore ogni volta che effettuiamo un calcolo. Li creeremo come nodo segnaposto punto TF.
Passaggio 1: definire la variabile
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Quando creiamo un nodo segnaposto, dobbiamo passare il tipo di dati aggiungendo numeri qui in modo da poter utilizzare un tipo di dati a virgola mobile, usiamo tf.float32. Dobbiamo anche dare un nome a questo nodo. Questo nome apparirà quando guardiamo le visualizzazioni grafiche del nostro modello. Chiamiamo questo nodo X_1 passando un parametro chiamato nome con un valore X_1 e ora definiamo X_2 allo stesso modo. X_2.
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 nel grafico, dobbiamo creare una sessione. In Tensorflow, viene eseguito da tf.Session(). Ora che abbiamo una sessione possiamo chiedere alla sessione di eseguire operazioni sul nostro grafico computazionale chiamando session. Per eseguire il calcolo, dobbiamo usare run.
Quando viene eseguita l'operazione di addizione, vedrà che è necessario acquisire i valori dei nodi X_1 e X_2, quindi dobbiamo anche inserire i valori per X_1 e X_2. Possiamo farlo fornendo un parametro chiamato feed_dict. Passiamo il valore 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 è 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. Puoi scrivere a Python codice. Queste righe di codice non sono correlate a Tensorflow.
2. Pipeline di dati Tensorflow: Tensorflow dispone di un'API integrata che ti aiuta a caricare i dati, eseguire l'operazione e alimentare facilmente l'algoritmo di apprendimento automatico. Questo metodo funziona molto bene soprattutto quando si dispone di un set di dati di grandi dimensioni. Ad esempio, è noto che i record di immagini sono enormi e non entrano nella memoria. La pipeline di dati gestisce la memoria da sola
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 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 o in piccoli blocchi. Ogni lotto verrà inserito nella pipeline e sarà pronto per la formazione. Costruire una pipeline è un'ottima soluzione perché consente di utilizzare il calcolo parallelo. Significa che Tensorflow addestrerà il modello su più CPU. Promuove il calcolo e consente di addestrare potenti reti neurali.
Vedrai nei prossimi tutorial come costruire una pipeline significativa per alimentare la tua rete neurale.
In poche parole, se disponi di un set di dati di piccole dimensioni, puoi caricare i dati in memoria con la libreria Panda.
Se disponi di un set di dati di grandi dimensioni e desideri utilizzare più CPU, ti sarà più comodo lavorare con la pipeline Tensorflow.
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 su 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)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
Sintesi
- 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 prodotti Google quotidiani, tra cui Gmail, Photo e Google Search Engine.
- Il team di Google Brain ha sviluppato TensorFlow per colmare il divario tra ricercatori e sviluppatori di prodotti. Nel 2015, hanno reso pubblico TensorFlow; sta rapidamente crescendo in popolarità. Oggigiorno, TensorFlow è la libreria di deep learning con il maggior numero di repository su GitHub.
- I professionisti utilizzano Tensorflow perché è facile da implementare su larga scala. È progettato per funzionare nel cloud o su dispositivi mobili come iOs e Android.
Tensorflow funziona in una sessione. Ogni sessione è definita da un grafico con calcoli diversi. Un semplice esempio può essere quello di moltiplicare per un numero. In Tensorflow sono richiesti 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 è creare una pipeline per caricare i dati. Se segui questi cinque passaggi, sarai in grado di caricare i dati su 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))