Corso di Keras per machine learning – prima lezione
Che cosa è Keras?
Keras è una libreria open source nata per facilitare lo sviluppo di applicazioni che sfruttano tecniche di apprendimento automatico basate su reti neurali. La libreria è stata scritta in Python ed è stata progettata come un’interfaccia di astrazione per altre librerie di più basso livello, in particolare TensorFlow, Microsoft Cognitive Toolkit (CNTK) e Theano i quali in Keras sono identificati con il nome di Backend.
Keras semplifica, pertanto, la vita a tutti coloro vogliano approcciare al mondo delle reti neurali, ma non hanno interesse ad approfondire le tecniche matematiche connesse all’uso delle stesse. La libreria nel suo complesso è veramente interessante perché è stata progettata con l’obiettivo di consentire una rapida prototipazione di modelli neurali, inoltre supporta oltre alle classiche reti feedforward, anche modelli convoluzionali e reti ricorrenti e schemi di connettività arbitrari. Essa, lavora inoltre senza problemi sia su CPU e che GPU.
Perché usare Keras?
Keras basa la propria forza sulla semplicità e sulla velocità di implementazione. Con Keras è infatti possibile, creare modelli complessi con un numero minimo di righe di codice mantenendo lo stesso robusto, e consente nel contempo una grande flessibilità grazie alla sua caratteristica modulare. In Keras il concetto di modello, infatti, è inteso come una sequenza o un grafo di singoli moduli che possono essere assemblati insieme, per creare nuovi modelli, con il minimo numero di restrizioni possibili. Le reti neurali, le funzioni di costo, gli ottimizzatori, gli schemi di inizializzazione, le funzioni di attivazione, gli schemi di regolarizzazione sono tutti visti in Keras come moduli e possono essere combinati tra loro per crearne di nuovi.
Installazione
Come abbiamo anticipato Keras è una libreria che ci consente di ottenere un livello di astrazione di librerie (backend) più articolate. In tal senso se si desidera utilizzare Keras dovremmo installare di conseguenza anche il backend di riferimento, pertanto nel caso in cui volessimo usare Keras con tensorflow sarà necessario installare entrambi.
In questo primo articolo darò delle indicazioni su come usare Keras con TensorFlow che dal mio punto di vista è la scelta da perseguire , tra l’altro Keras per impostazioni predefinite, utilizza il backend TensorFlow , qualora già installato.
Quindi in prima istanza dovrete installare TensorFlow ed il modo più semplice per farlo è quello di lanciare il comando.
$ pip install tensorflow
Nel caso in cui vogliate utilizzare Tensorflow per Gpu sarà sufficiente lanciare il comando:
$ pip install tensorflow-gpu
ma dovrete fare un buon lavoro di configurazione delle librerie CUDA della vostra scheda altrimenti non sarà possibile sfruttare la GPU. ( Per questa installazione più complessa vi rimando in un altra occasione). Per installare Keras da PyPI sarà sufficiente lanciare il comando
$ sudo pip install keras
Alternativamente scaricate Keras usando git da seguente repository:
$ git clone https://github.com/keras-team/keras.git
accedete alla cartella Keras ed eseguite il comando install:
$ cd keras
$ python setup.py install
Configurazione
Se avete eseguito Keras almeno una volta, dovreste trovare il file di configurazione di Keras nel path della home:
~/.keras/keras.json
nel caso non fosse presente sarà possibile crearne uno che abbia questo aspetto:
{ "image_dim_ordering": "tf", "epsilon": 1e-07, "floatx": "float32", "backend": "tensorflow" }
A questo punto dovreste essere già in grado di usare l’ambiente.
Come è strutturato ?
Come già anticipato, Keras basa la sua logica sul concetto di modello che è un modo semplice per organizzare i livelli della rete neurale. Il modello più comunemente usato in Keras è quello sequenziale, che, in sostanza implementa, una pila lineare di livelli della rete neurale, ma esiste anche la possibilità di usare il modello funzionale.
Cerchiamo di capire di cosa stiamo parlando, approcciando al problema con un esempio, ma prima di andare avanti vi invito a leggere qualche nozione sulle reti neurali feedforward qualora ne foste allo scuro, perché sarà utile per la comprensione di questo articolo. Se vi va potete leggere qualcosa su questo mio vecchio articolo.
Esempio di Applicazione
Nei prossimi articoli impareremo ad usare Keras e scriveremo due esempi con l’obiettivo di spiegare come utilizzare keras per implementare tipi diversi di rete neurale. Nel caso specifico tenteremo di approfondire due casi tipici di supervised learning :
- regressione lineare
- classificatore
Il primo esempio dimostrerà come implementare un classificatore per fornire un “parere” qualitativo sul valore di un immobile, quale ad esempio:
- economico,
- costoso
Il secondo esempio invece risolverà un classico problema di regressione e fornirà la predizione del prezzo di un immobile.
In sintesi con l’implementazione di un regressore saremo in grado di calcolare un valore approssimato dell’immobile, mentre con l’implementazione di un classificatore potremmo verificare esclusivamente l’appartenenza dell’immobile ad un classe ed ottenere pertanto una risposta qualitativa quale ad esempio la bontà dell’immobile (costoso, economico). |
Uno dei primi problemi da affrontare quando si vuole di addestrare una rete neurale e di avere un dataset utile per effettuare il training. Per gli esempi seguenti proveremo a costruire uno dataset, lavorando su dati che possiamo recuperare da internet.
Estrazione di un dataset
La tecnica che farò vedere per costruire il dataset si basa sullo scraping, e poiché la tecnica non viene ben vista, anzi in taluni casi è illegale, non mi assumo responsabilità dell’utilizzo che ne farete. Il primo passo da cui partire è l’identificazione del target, nel nostro caso sarà immobiliare.it; il secondo passo è quello di costruirsi uno strumento per recuperare i dati in automatico; solo a scopo didattico vi lascio lo script per costruire il dataset ed il link da cui scaricare il codice sorgente.
#!/usr/bin/env python # coding: utf-8 import requests from bs4 import BeautifulSoup from sklearn.feature_extraction.text import CountVectorizer import pandas as pd a_prezzo=[] a_locali=[] a_m2superficie=[] a_bagni=[] a_piano=[] for index in range(0,70,1): print (index) page = 'https://www.immobiliare.it/vendita-case/salerno/?pag='+str(index) web_result = requests.get(page).text soup = BeautifulSoup(web_result,'lxml') for ul in soup.findAll('ul',{'class':'listing-features list-piped'}): li=ul.findAll('li',{'class':'lif__item'}); try: prezzo=str(li[0].text).strip() except Exception as e: prezzo="ND" try: locali=str(li[1].span.text).strip() except Exception as e: locali="ND" try: m2superficie=str(li[2].span.text).strip() except Exception as e: m2superficie="ND" try: bagni=str(li[3].span.text).strip() except Exception as e: bagni="ND" try: piano=(li[4].abbr.text).strip() except Exception as e: piano="ND" a_prezzo.append(prezzo) a_locali.append(locali) a_m2superficie.append(m2superficie) a_bagni.append(bagni) a_piano.append(piano) print("prezzo: " + prezzo) print("locali: " + locali) print("m2superficie: " + m2superficie) print("bagni: " + bagni) print("piano: " + piano) print("************************************************************") df = pd.DataFrame({'prezzo': a_prezzo, 'locali': a_locali, 'm2superficie': a_m2superficie, 'bagni' : a_bagni, 'piano' : a_piano}) df.to_csv('./dataset.csv')
Lo script costruirà un file in formato csv su cui sarà necessario effettuare qualche piccola operazione di ripulitura, ma nulla di particolarmente complesso. Ad esempio sarà necessario eliminare o modificare con dati numerici le righe dove compaiono ad esempio campi non definito ND o valori di prezzo non dichiarati :PREZZO SU RICHIESTA.
Giusto per non avere dubbi : La rete neurale lavora esclusivamente su dati numerici.
Di seguito una sintesi di quello che si dovrebbe ottenere come risultato finale.
bagni | locali | Superficie | piano | prezzo |
2 | 4 | 100 | 2 | € 240.000 |
2 | 3 | 115 | 2 | € 295.000 |
2 | 4 | 125 | 6 | € 340.000 |
2 | 3 | 109 | 3 | € 379.000 |
2 | 5 | 150 | 3 | € 345.000 |
1 | 2 | 60 | 3 | € 139.000 |
2 | 4 | 120 | 5 | € 295.000 |
1 | 4 | 89 | 4 | € 225.000 |
… | … | … | … | … |
Come vedremo in seguito, osservando il dataset possiamo immaginare che la rete neurale che andremo a creare gestirà 4 parametri di ingresso (Locali,Superficie,Piano e Numero di Bagni), ed uno in uscita uscita, ovvero il valore dell’immobile, ma di questo parleremo nelle prossime lezioni.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments