Iniziare con Tensorflow

Iniziare con Tensorflow
Tensorflow è il bambino cerebrale di Google e al centro è una libreria per il calcolo numerico. È scritto in C/C ++ e ha un'API molto flessibile. Questa API può essere interfacciata con un front-end Python in modo da poter scrivere piccoli frammenti di codice Python per risolvere problemi complicati. Un'API flessibile e coerente consente inoltre agli sviluppatori di utilizzare lo stesso codice front-end per eseguire su varie piattaforme come GPU NVIDIA, CPU per uso generale e persino dispositivi mobili e incorporati ognuno dei quali ha un'implementazione molto diversa nel back-end.

Tensorflow ha trovato un uso immenso nel campo dell'apprendimento automatico, proprio perché l'apprendimento automatico comporta un sacco di scricchiolio e viene utilizzato come tecnica generalizzata di risoluzione dei problemi. E sebbene interagiremo con esso usando Python, ha i front-end per altre lingue come GO, Node.js e persino c#.

Tensorflow è come una scatola nera che nasconde tutte le sottigliezze matematiche al suo interno e lo sviluppatore chiama solo le funzioni giuste per risolvere un problema. Ma quale problema?

Machine Learning (ML)

Supponiamo che tu stia progettando un bot per giocare a scacchi. A causa del modo in cui gli scacchi sono progettati, il modo in cui i pezzi si muovono e l'obiettivo ben definito del gioco, è del tutto possibile scrivere un programma che giocherebbe molto bene il gioco. In effetti, avrebbe superato in astuzia l'intera razza umana negli scacchi. Saprebbe esattamente quale mossa deve fare dato lo stato di tutti i pezzi sul tabellone.

Tuttavia, un tale programma può solo giocare a scacchi. Le regole del gioco sono cotte nella logica del codice e tutto ciò che il programma fa è eseguire quella logica rigorosamente e più accuratamente di qualsiasi essere umano potrebbe. Non è un algoritmo per scopi generici che puoi utilizzare per progettare qualsiasi bot di gioco.

Con l'apprendimento automatico, i cambiamenti del paradigma e gli algoritmi diventano sempre più generali.

L'idea è semplice, inizia definendo un problema di classificazione. Ad esempio, si desidera automatizzare il processo di identificazione delle specie di ragni. Le specie che ti sono conosciute sono le varie classi (da non confondere con le classi tassonomiche) e lo scopo dell'algoritmo è quello di risolvere una nuova immagine sconosciuta in una di queste classi.

Qui, il primo passo per l'umano sarebbe quello di determinare le caratteristiche di vari singoli ragni. Forniremmo dati sulla lunghezza, la larghezza, la massa corporea e il colore dei singoli ragni insieme alle specie a cui appartengono:

Lunghezza Larghezza Massa Colore Struttura Specie
5 3 12 Marrone liscio Papà gambelunghe
10 8 28 Marrone nero peloso Tarantola

Avere una vasta raccolta di tali singoli dati del ragno verrà utilizzato per "addestrare" l'algoritmo e un altro set di dati simile verrà utilizzato per testare l'algoritmo per vedere come va bene nuove informazioni che non ha mai incontrato prima, ma che già conosciamo il rispondi a.

L'algoritmo inizierà in modo randomizzato. Vale a dire, ogni ragno indipendentemente dalle sue caratteristiche sarebbe classificato come chiunque della specie. Se ci sono 10 specie diverse nel nostro set di dati, questo algoritmo ingenuo verrebbe data la classificazione corretta circa 1/10 del tempo a causa della pura e sterlina.

Ma poi l'aspetto dell'apprendimento automatico inizierebbe a prendere il sopravvento. Inizierebbe ad associare alcune funzionalità con un certo risultato. Ad esempio, è probabile che i ragni pelosi siano tarantole, così come i ragni più grandi. Quindi ogni volta che si presenta un nuovo ragno che è grande e peloso, verrà assegnata una maggiore probabilità di essere tarantula. Nota, stiamo ancora lavorando con le probabilità, questo perché intrinsecamente stiamo lavorando con un algoritmo probabilistico.

La parte di apprendimento funziona alterando le probabilità. Inizialmente, l'algoritmo inizia assegnando in modo casuale etichette "specie" agli individui facendo correlazioni casuali come, essendo "pelose" ed essendo "gambe lunghe di papà". Quando fa una tale correlazione e il set di dati di addestramento non sembra essere d'accordo, quell'assunzione viene eliminata.

Allo stesso modo, quando una correlazione funziona bene attraverso diversi esempi, diventa più forte ogni volta. Questo metodo di inciampare verso la verità è straordinariamente efficace, grazie a molte sottigliezze matematiche che, come principiante, non vorresti preoccuparti.

Tensorflow e addestrando il tuo classificatore di fiori

Tensorflow prende anche l'idea dell'apprendimento automatico. Nell'esempio sopra, eri incaricato di determinare le caratteristiche che distingue una specie di ragno da un'altra. Abbiamo dovuto misurare scrupolosamente i singoli ragni e creare centinaia di tali record.

Ma possiamo fare di meglio, fornendo solo dati di immagine grezzi all'algoritmo, possiamo lasciare che l'algoritmo trovi motivi e comprendere varie cose sull'immagine come riconoscere le forme nell'immagine, quindi capire qual è la consistenza delle diverse superfici, il colore , Così via. Questa è la nozione iniziale di visione artificiale e puoi usarla anche per altri tipi di input, come i segnali audio e addestrare il tuo algoritmo per il riconoscimento vocale. Tutto ciò è sotto il termine ombrello di "apprendimento profondo" in cui l'apprendimento automatico viene portato al suo estremo logico.

Questa serie generalizzata di nozioni può quindi essere specializzata quando si tratta di molte immagini di fiori e la categorizzazione.

Nell'esempio seguente useremo un Python2.7 front-end per interfacciarsi con Tensorflow e useremo PIP (non PIP3) per installare Tensorflow. Il supporto Python 3 è ancora un po 'buggy.

Per creare il tuo classificatore di immagini, usando TensorFlow First Installo utilizzandolo utilizzando PIP:

$ pip Installa Tensorflow

Successivamente, dobbiamo clonare il Tensorflow-for-Poets-2 repository git. Questo è davvero un buon punto di partenza per due motivi:

  1. È semplice e facile da usare
  2. Viene pre-addestrato in una certa misura. Ad esempio, il classificatore di fiori è già addestrato per capire quale consistenza sta guardando e quali forme sta guardando in modo che sia computazionalmente meno intensivo.

Prendiamo il repository:

$ git clone https: // github.com/googlecodelabs/tensorflow-for-poets-2
$ CD Tensorflow-For-Poets-2

Questa sarà la nostra directory di lavoro, quindi tutti i comandi dovrebbero essere emessi da ora, da ora in poi.

Dobbiamo ancora addestrare l'algoritmo per il problema specifico di riconoscere i fiori, per questo abbiamo bisogno di dati di allenamento, quindi prendiamolo:

$ curl http: // scarica.Tensorflow.Org/Esempio_Images/Flower_photos.TGZ
| tar xz -c tf_files

La directory .. ./tensorflow-per-poets-2/tf_files contiene una tonnellata di queste immagini correttamente etichettate e pronte per essere utilizzate. Le immagini saranno per due scopi diversi:

  1. Formazione del programma ML
  2. Testare il programma ML

Puoi controllare il contenuto della cartella tf_files E qui scoprirai che stiamo restringendo solo 5 categorie di fiori, vale a dire margherite, tulipani, girasoli, dente di leone e rose.

Formazione il modello

È possibile avviare il processo di addestramento impostando prima le seguenti costanti per ridimensionare tutte le immagini di input in una dimensione standard e utilizzare un'architettura mobilenet leggera:

$ Image_size = 224
$ Architecture = "mobilenet_0.50 _ $ image_size "

Quindi invoca lo script Python eseguendo il comando:

$ Python -m Scripts.riqualificazione \
--bottleneck_dir = tf_files/bottlenecks \
--How_Many_Training_steps = 500 \
--Model_dir = tf_files/ models/ \
--Riepilogo_dir = tf_files/training_summaries/"$ architecture" \
--output_graph = tf_files/reterined_graph.Pb \
--output_labels = tf_files/reterined_labels.TXT \
--architecture = "$ architecture" \
--image_dir = tf_files/flower_photos

Mentre ci sono molte opzioni specificate qui, la maggior parte di esse specifica le tue directory di dati di input e il numero di iterazione, nonché i file di output in cui le informazioni sul nuovo modello sarebbero memorizzate. Questo non dovrebbe richiedere più di 20 minuti per correre su un laptop mediocre.

Una volta che la sceneggiatura termina sia l'allenamento che il test ti darà una stima di precisione del modello addestrato, che nel nostro caso era leggermente superiore al 90%.

Utilizzando il modello addestrato

Ora sei pronto per usare questo modello per il riconoscimento dell'immagine di qualsiasi nuova immagine di un fiore. Useremo questa immagine:

Il volto del girasole è appena visibile e questa è una grande sfida per il nostro modello:

Per ottenere questa immagine da Wikimedia Commons usa wget:

$ wget https: // upload.Wikimedia.Org/Wikipedia/Commons/2/28/SUNFLOWER_HEAD_2011_G1.jpg
$ MV SUNFLOWER_HEAD_2011_G1.jpg tf_files/sconosciuto.jpg

È salvato come sconosciuto.jpg sotto il tf_files sottodirectory.

Ora, per il momento della verità, vedremo cosa ha da dire il nostro modello su questa immagine.Per farlo, invochiamo il etichetta_image Script:

$ Python -m Scripts.etichetta_image --graph = tf_files/reterined_graph.Pb --
immagine = tf_files/sconosciuto.jpg

Otterresti un output simile a questo:

I numeri accanto al tipo di fiore rappresentano la probabilità che la nostra immagine sconosciuta appartenga a quella categoria. Ad esempio, è 98.04% certo che l'immagine è di un girasole ed è solo 1.37% di probabilità che sia una rosa.

Conclusione

Anche con risorse computazionali molto mediocre, stiamo assistendo a una precisione sbalorditiva nell'identificare le immagini. Ciò dimostra chiaramente la potenza e la flessibilità del tensorflow.

Da qui in poi, puoi iniziare a sperimentare con vari altri tipi di input o provare a iniziare a scrivere la tua diversa applicazione usando Python e Tensorflow. Se vuoi conoscere un po 'meglio il funzionamento interno dell'apprendimento automatico qui è un modo interattivo per farlo.