Una CNN in Keras per il riconoscimento di numeri manoscritti.

Schema Rete Neurale Convoluzionale

Le reti neurali convoluzionali (CNN) sono una particolare categoria di sistemi per il Machine Learning impiegati principalmente per la computer vision e per la speech recognition. Creare un modello di CNN in Python con Keras è abbastanza semplice, in questo articolo costruiremo un classificatore per riconoscere i caratteri numerici manoscritti, avvalendoci di un dataset facilmente reperibile online (MNIST).

Andiamo a creare la classe MNIST_CNN che ci consentirà di processare il dataset, creare il modello, farne il training e poi salvarlo/caricarlo da file. Iniziamo però specificando quale backend usare con keras:

Successivamente importiamo tutte le librerie necessarie:

Ora possiamo creare i metodi della nostra classe, il costruttore si occuperà del preprocessing dei dati che useremo per il training e la valutazione del modello:

Il metodo fitModel() gestirà la creazione del modello e il relativo training. Al termine salveremo sia il modello che i “pesi” su un file, così da poterlo caricare e utilizzare immediatamente per le elaborazioni successive:

Nel caso abbiamo già un modello addestrato (nel repository GitHub trovi anche il file con modello e pesi), servirà un metodo per caricarlo. Eccolo:

L’ultimo metodo necessario è quello che valuta le performance del modello caricato:

Adesso abbiamo tutto quello che serve. Alla fine del file possiamo anche aggiungere qualche riga di codice per testare la nostra classe senza importarla altrove:

Per utilizzare questo modello ti consiglio di utilizzare un ambiente virtuale di Python3 creato per lo scopo. Per crearlo e installare i pacchetti necessari esegui queste istruzioni da console per unix (su Windows sono comunque molto simili):

Il codice completo e il file con la CNN già addestrata è disponibile su questo repository GitHub.