Implementare una semplice rete neurale con Python e Keras, mediante una manciata di righe di codice
Una rete neurale artificiale (RNA) è un modello computazionale ispirato al funzionamento dei neuroni del cervello umano. Quest'ultima è composta da strati di neuroni artificiali (unità di elaborazione) interconnessi tra loro attraverso quelli che potremmo definire "pesi sinaptici".
Il processo di addestramento di una rete neurale è composto essenzialmente da due fasi: quella di propagazione in avanti e quella di retropropagazione dell'errore.
Di solito, una rete neurale è composta da tre strati. Il primo strato è l'input (I), che si occupa di elaborare gli input per adattarli alle esigenze dei neuroni. Il secondo strato è lo strato nascosto (H, hidden), che si occupa dell'elaborazione effettiva e può essere composto da più colonne di neuroni. Il terzo strato è l'output (O) e raccoglie i risultati per adattarli alle esigenze del blocco successivo della rete neurale. Queste reti possono diventare molto complesse e coinvolgere migliaia di neuroni e decine di migliaia di connessioni.
Durante l'addestramento, i pesi sinaptici vengono aggiornati gradualmente per migliorare le prestazioni della rete neurale nel compito specifico (come la classificazione o il riconoscimento di pattern, ad esempio).
Va specificato inoltre che all'output di un neurone, o di uno strato di neuroni, va applicata una funzione di attivazione (una funzione matematica). L'introduzione di funzioni di attivazione non lineari è fondamentale per consentire alle reti neurali di apprendere e rappresentare relazioni complesse nei dati.
Tutto molto affascinante. Ma come tradurre in pratica quanto detto?
Consigliati da LinkedIn
Usando Python, uno dei linguaggi più utilizzati per lo sviluppo di reti neurali; sapevate che è possibile implementare una semplice rete neurale scrivendo ben poche righe di codice?
Di seguito viene fornito un esempio che utilizza Keras, una libreria open source per l'apprendimento automatico e le reti neurali. Keras è stata progettata per fornire un'interfaccia ad alto livello rispetto ad altre librerie di apprendimento automatico di livello inferiore e supporta diversi back-end come TensorFlow, Microsoft Cognitive Toolkit e Theano.
from keras.models import Sequentia
from keras.layers import Dense
model = Sequential([Dense(64, activation='relu', input_dim=100),
Dense(64, activation='relu'),
Dense(10, activation='softmax')])
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=32)
loss, accuracy = model.evaluate(x_test, y_test, batch_size=32)
In questo esempio, abbiamo utilizzato la sintassi di inizializzazione sequenziale per definire il modello e abbiamo specificato gli strati utilizzando l'oggetto Dense (uno strato di neuroni totalmente connessi in una rete neurale; uno degli strati più comuni utilizzati per costruire reti neurali feedforward). Abbiamo anche utilizzato la sintassi compatta per compilare il modello, addestrarlo e valutarlo.
Il codice utilizza il metodo fit per addestrare il modello utilizzando i dati di addestramento (x_train e y_train) per un numero specificato di epoche (nell'esempio 10).
Successivamente il modello viene valutato mediante metodo evaluate, al fine di avere un riscontro circa le sue prestazioni, utilizzando i dati di test (x_test e y_test), calcolando la perdita e l'accuratezza.