Deep Learning con Keras: formazione della rete neurale con Keras [con codice]
Pubblicato: 2020-12-24Keras è una libreria Python che fornisce un'API per lavorare con reti neurali e framework di Deep Learning. Keras fornisce funzioni e moduli estremamente utili quando si ha a che fare con varie applicazioni di Deep Learning in Python.
Alla fine di questo tutorial, avrai la conoscenza di quanto segue:
- Cos'è Keras?
- API Keras
- Formazione di una rete neurale in Keras
Sommario
Cos'è Keras?
Per fare Deep Learning, la libreria più utilizzata in precedenza era Tensorflow 1.x, che era difficile da gestire per i principianti. Richiedeva molta codifica per creare una rete di base a 1 livello. Tuttavia, con Keras, il processo completo di creazione della struttura di una rete neurale e quindi di addestramento e monitoraggio è diventato estremamente semplice.
Keras è un'API di alto livello che può essere eseguita su backend Tensorflow, Theano e CNTK. Ci dà la possibilità di eseguire esperimenti utilizzando reti neurali utilizzando API di alto livello e di facile utilizzo. È anche in grado di funzionare su CPU e GPU.
API Keras
Keras ha 10 diversi moduli API pensati per gestire la modellazione e l'addestramento delle reti neurali. Esaminiamo ciascuno di essi per capire cosa ha da offrire tutto Keras.
Modelli
L'API Models fornisce la funzionalità per costruire reti neurali complesse aggiungendo/rimuovendo livelli. Il modello può essere sequenziale, il che significa che i livelli verranno impilati in sequenza con input e output singoli. Il modello può essere anche funzionale, cioè con modelli completamente personalizzabili. Questo è ciò che viene utilizzato principalmente nel settore.

L'API ha anche il modulo di formazione che fornisce metodi per compilare il modello insieme all'ottimizzatore e alla funzione di perdita, un metodo per adattare il modello, un metodo per valutare e prevedere anche nuovi dati. Inoltre, dispone anche di metodi per l'addestramento, il test e la previsione anche su dati batch. Models API ha anche il salvataggio e la serializzazione dei modelli.
Strati
I livelli sono gli elementi costitutivi di qualsiasi rete neurale. L'API Layers offre un set completo di metodi per costruire l'architettura della rete neurale. L'API Layers ha la classe Base Layer che contiene i metodi necessari per creare livelli personalizzati con pesi e inizializzatori personalizzati.
Contiene la classe Layer Activations che consiste nelle varie funzioni di attivazione come ReLU, Sigmoid, Tanh, Softmax, ecc. La classe Layer Weight Initializers offre metodi per inizializzare i pesi in diversi modi.
Consiste anche nella classe Core Layers che consiste in classi richieste per aggiungere livelli core come Dense layer, Activation Layer, Embedding layer, ecc. La classe Convolution Layer offre vari metodi per aggiungere diversi tipi di strati di convoluzione. La classe Pooling Layers contiene i metodi richiesti per diversi tipi di pool come Max Pooling, Average Pooling, Global Max Pooling e Global Average Pooling.
Richiami
I callback sono un modo per tenere traccia del processo di addestramento del modello. Con la richiamata abilitata, è possibile eseguire varie azioni prima o dopo la fine di un'epoca o di un batch. Con le richiamate puoi:
- Monitora le metriche di formazione registrando le metriche in TensorFlow Board
- Salvataggio periodico del modello su disco
- Arresto anticipato nel caso in cui la perdita non diminuisca in modo significativo dopo determinate epoche
- Visualizza gli stati interni e le statistiche di un modello durante la formazione
Preelaborazione del set di dati
I dati di solito sono in formato grezzo e si trovano in directory organizzate e devono essere preelaborati prima di essere inseriti nel modello per l'adattamento. La classe Image Data Preprocessing ha molte di queste funzioni dedicate. Ad esempio, i dati dell'immagine devono trovarsi nell'array numerico per il quale è possibile utilizzare la funzione img_to_array. Oppure, se le immagini sono presenti all'interno di una directory e sottocartelle, possiamo utilizzare la funzione image_dataset_from_directory.
L'API di preelaborazione dei dati ha anche classi per dati di serie temporali e dati di testo.
Ottimizzatori
Gli ottimizzatori sono la spina dorsale di qualsiasi rete neurale. Ogni rete neurale lavora sull'ottimizzazione di una funzione di perdita per trovare i pesi migliori per la previsione. Esistono diversi tipi di ottimizzatori che seguono tecniche leggermente diverse per trovare pesi ottimali. Tutti questi ottimizzatori sono disponibili nell'API degli ottimizzatori: SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL.
Perdite
Le funzioni di perdita devono essere specificate durante la compilazione di un modello. Questa funzione di perdita verrebbe ottimizzata dall'ottimizzatore che è stato passato anche come parametro nel metodo di compilazione. Le tre principali classi di perdita sono: Perdite probabilistiche, Perdite di regressione, Perdite a cerniera.
Metrica
Le metriche vengono utilizzate in ogni modello ML per quantificarne le prestazioni sui dati di test. Le metriche sono simili alle funzioni di perdita, tranne per il fatto che vengono utilizzate sui dati di test. Sono disponibili molte metriche di accuratezza come accuratezza, accuratezza binaria, accuratezza categoriale, ecc. Contiene anche metriche probabilistiche come entropia incrociata binaria, entropia incrociata categoriale, ecc. Esistono metriche per il controllo di falsi positivi/negativi nonché AUC, Precisione, richiamo, ecc.
Oltre a queste metriche di classificazione, ha anche metriche di regressione come Mean Squared Error, Root Mean Squared Error, Mean Absolute Error, ecc.

Leggi anche: What's What di Keras e TensorFlow
Applicazioni Keras
La classe Keras Applications è composta da alcuni modelli predefiniti insieme a pesi pre-addestrati. Questi modelli pre-addestrati vengono utilizzati per il processo di Transfer Learning. Questi modelli pre-addestrati sono diversi a seconda dell'architettura, del numero di strati, dei pesi allenabili, ecc. Alcuni di essi sono Xception, VGG16, Resnet50, MobileNet, ecc.
Formazione di una rete neurale con Keras
Consideriamo un semplice set di dati come MNIST che è disponibile nella classe dei set di dati di Keras. Realizzeremo una semplice rete neurale convoluzionale sequenziale per classificare le immagini scritte a mano delle cifre 0-9.
#Caricamento del set di dati da keras.datasets import mnist (x_treno, y_treno), (x_test, y_test) = mnist.load_data() |
Normalizzare il set di dati dividendo ogni pixel per 255. Inoltre, è necessario trasformare le immagini in 4 dimensioni prima di inviarle a un modello CNN.
x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) x_treno /= 255 x_test /= 255 x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 ) x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 ) |
Abbiamo bisogno di etichettare la codifica delle classi prima di inviarla al modello. Lo faremo usando la classe Utils di Keras.
da keras.utils import to_categorical
|
Ora possiamo iniziare a creare il modello utilizzando l'API sequenziale.
da keras.models import Sequential da keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), activation= 'relu' , input_shape=x_train.shape[ 1 :])) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(Dropout(rate= 0,25 )) model.add(Conv2D(filtri= 64 , kernel_size=( 3 , 3 ), attivazione= 'relu' )) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(Dropout(rate= 0,25 )) model.add(Appiattisci()) model.add(Dense( 256 , activation= 'relu' )) model.add(Dropout(rate= 0,5 )) model.add(Dense( 10 , activation= 'softmax' )) |
Nel codice sopra, dichiariamo un modello sequenziale e quindi aggiungiamo più livelli ad esso. Lo strato convoluzionale, seguito da uno strato Max Pooling e quindi uno strato di abbandono per la regolarizzazione. Successivamente appiattiamo l'output utilizzando lo strato appiattito e l'ultimo strato è uno strato denso completamente connesso con 10 nodi.
Successivamente, dobbiamo compilarlo passando la funzione di perdita, l'ottimizzatore e la metrica.
modello.compila( loss= 'categorical_crossentropy' , ottimizzatore= 'adam' , metriche=[ 'accuratezza' ] ) |
Ora dovremmo aggiungere immagini aumentate dalle immagini originali per aumentare il set di allenamento e la precisione del modello. Lo faremo usando la funzione ImageDataGenerator.
da keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( intervallo_rotazione= 10 , zoom_range= 0.1 , width_shift_range= 0.1 , height_shift_range= 0.1 ) |
Ora che il modello è compilato e le immagini aumentate, possiamo iniziare il processo di addestramento. Poiché abbiamo utilizzato un generatore di dati di immagine sopra, utilizzeremo il metodo fit_generator anziché semplicemente fit.

epoche = 3 dimensione_lotto = 32 history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epoche, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size ) |
L'output del processo di formazione è il seguente:
3Ora il modello è addestrato e può essere valutato eseguendo su dati di test invisibili.
Lettura correlata: Deep Learning e reti neurali con Keras
Prima che tu vada
In questo tutorial, abbiamo visto come è strutturato Keras e semplifica la creazione di una rete neurale complessa. Keras è ora racchiuso in Tensorflow 2.x che gli offre ancora più funzionalità. Prova altri esempi simili ed esplora le funzioni e le caratteristiche di Keras.
Se sei interessato a saperne di più sull'apprendimento automatico, dai un'occhiata al Diploma PG di IIIT-B e upGrad in Machine Learning e AI, progettato per i professionisti che lavorano e offre oltre 450 ore di formazione rigorosa, oltre 30 casi di studio e incarichi, IIIT- B Status di Alumni, oltre 5 progetti pratici pratici e assistenza sul lavoro con le migliori aziende.