Cos'è Keras? Spiegazione dell'API della rete neurale profonda

Sebbene le reti neurali profonde siano di gran moda, la complessità dei principali framework è stata un ostacolo al loro utilizzo per gli sviluppatori che non conoscono l'apprendimento automatico. Sono state presentate diverse proposte per API di alto livello migliorate e semplificate per la creazione di modelli di rete neurale, che tendono tutte a sembrare simili da lontano ma mostrano differenze a un esame più attento.

Keras è una delle principali API per reti neurali di alto livello. È scritto in Python e supporta più motori di calcolo di reti neurali back-end.

Keras e TensorFlow

Dato che il progetto TensorFlow ha adottato Keras come API di alto livello per la prossima versione di TensorFlow 2.0, Keras sembra essere un vincitore, se non necessariamente il vincitore. In questo articolo esploreremo i principi e l'implementazione di Keras, con l'obiettivo di capire perché è un miglioramento rispetto alle API di deep learning di basso livello.

Anche in TensorFlow 1.12, il tutorial ufficiale Introduzione a TensorFlow utilizza l'API Keras di alto livello incorporata in TensorFlow, tf.keras . Al contrario, l'API di TensorFlow Core richiede l'utilizzo di grafici computazionali, tensori, operazioni e sessioni di TensorFlow, alcuni dei quali possono essere difficili da capire quando inizi a lavorare con TensorFlow. Ci sono alcuni vantaggi nell'usare l'API TensorFlow Core di basso livello, principalmente durante il debug, ma fortunatamente puoi combinare le API TensorFlow di alto livello e di basso livello secondo necessità.

Principi di Keras

Keras è stato creato per essere facile da usare, modulare, facile da estendere e per lavorare con Python. L'API è stata "progettata per gli esseri umani, non per le macchine" e "segue le migliori pratiche per ridurre il carico cognitivo".

Livelli neurali, funzioni di costo, ottimizzatori, schemi di inizializzazione, funzioni di attivazione e schemi di regolarizzazione sono tutti moduli indipendenti che è possibile combinare per creare nuovi modelli. I nuovi moduli sono semplici da aggiungere, come nuove classi e funzioni. I modelli sono definiti nel codice Python, non in file di configurazione del modello separati.

Perché Keras?

I motivi principali per utilizzare Keras derivano dai suoi principi guida, in primo luogo quello di essere user friendly. Oltre alla facilità di apprendimento e alla facilità di creazione di modelli, Keras offre i vantaggi di un'ampia adozione, supporto per un'ampia gamma di opzioni di distribuzione in produzione, integrazione con almeno cinque motori di back-end (TensorFlow, CNTK, Theano, MXNet e PlaidML), e un forte supporto per più GPU e formazione distribuita. Inoltre, Keras è supportato da Google, Microsoft, Amazon, Apple, Nvidia, Uber e altri.

Il back end di Keras

Keras vero e proprio non esegue le proprie operazioni di basso livello, come prodotti tensoriali e convoluzioni; per questo si basa su un motore di back-end. Anche se Keras supporta più motori di back-end, il suo back-end principale (e predefinito) è TensorFlow e il suo principale sostenitore è Google. L'API Keras viene fornita in TensorFlow come tf.keras, che come accennato in precedenza diventerà l'API TensorFlow principale a partire da TensorFlow 2.0.

Per cambiare i back-end, modifica semplicemente il tuo $HOME/.keras/keras.jsonfile e specifica un nome di back-end diverso, come theanoo CNTK. In alternativa, puoi sovrascrivere il back-end configurato definendo la variabile d'ambiente KERAS_BACKEND, nella tua shell o nel tuo codice Python usando la os.environ["KERAS_BACKEND"]proprietà.

Modelli Keras

Il modello è la struttura dati centrale di Keras. Esistono due tipi principali di modelli disponibili in Keras: il Sequentialmodello e la Modelclasse utilizzata con l'API funzionale.

Modelli sequenziali Keras

Il Sequentialmodello è una pila lineare di livelli e gli strati possono essere descritti in modo molto semplice. Ecco un esempio dalla documentazione di Keras che utilizza model.add()per definire due strati densi in un Sequentialmodello:

importare keras

da keras.models import Sequential

da keras.layers importa Dense

#Crea un modello sequenziale con strati densi, utilizzando il metodo di aggiunta

#Dense implementa l'operazione:

# output = attivazione (punto (input, kernel) + bias)

#Units sono la dimensionalità dello spazio di output per il layer,

# che è uguale al numero di unità nascoste

# Le funzioni di attivazione e di perdita possono essere specificate da stringhe o classi

model.add (Dense (unità = 10, attivazione = "softmax"))

# Il metodo di compilazione configura il processo di apprendimento del modello

              ottimizzatore = "sgd",

              metriche = ["accuratezza"])

# Il metodo di adattamento esegue l'addestramento in batch

# x_train e y_train sono array Numpy, proprio come nell'API Scikit-Learn.

# Il metodo di valutazione calcola le perdite e le metriche

# per il modello addestrato

# Il metodo di previsione applica il modello addestrato agli input

# per generare output

classi = model.predict (x_test, batch_size = 128)

Vale la pena leggere i commenti nel codice sopra. Vale anche la pena notare quanto poco cruft c'è nel codice effettivo rispetto, ad esempio, alle API TensorFlow di basso livello. Ogni definizione di livello richiede una riga di codice, la compilazione (definizione del processo di apprendimento) richiede una riga di codice e l'adattamento (addestramento), la valutazione (calcolo delle perdite e le metriche) e la previsione degli output dal modello addestrato richiedono ciascuna una riga di codice .

API funzionale Keras

Il modello sequenziale di Keras è semplice ma limitato nella topologia del modello. L'API funzionale di Keras è utile per creare modelli complessi, come modelli multi-input / multi-output, grafi aciclici diretti (DAG) e modelli con livelli condivisi.

L'API funzionale utilizza gli stessi livelli del modello sequenziale ma offre maggiore flessibilità nel metterli insieme. Nell'API funzionale si definiscono prima i livelli, quindi si crea il modello, si compila e si adatta (si addestra). La valutazione e la previsione sono essenzialmente le stesse di un modello sequenziale, quindi sono state omesse nel codice di esempio riportato di seguito.

da keras.layers importa Input, Dense

da keras.models import Model

# Questo restituisce un tensore

# un'istanza di livello è richiamabile su un tensore e restituisce un tensore

x = Denso (64, attivazione = "relu") (x)

previsioni = Denso (10, attivazione = "softmax") (x)

# Questo crea un modello che include

# il livello di input e tre livelli densi

model.compile (optimizer = 'rmsprop',

              loss = "categorical_crossentropy",

              metriche = ["accuratezza"])

model.fit (data, labels)  # inizia l'addestramento

Strati di Keras

Negli esempi precedenti abbiamo utilizzato solo i Denselivelli. Keras ha un'ampia selezione di tipi di livelli predefiniti e supporta anche la scrittura di livelli personalizzati.

I livelli principali includono Dense(prodotto scalare più bias), Activation(funzione di trasferimento o forma del neurone), Dropout(impostare casualmente una frazione di unità di input su 0 ad ogni aggiornamento di addestramento per evitare l'overfitting), Lambda(racchiudere un'espressione arbitraria come Layeroggetto) e molti altri . I livelli di convoluzione (l'uso di un filtro per creare una mappa di caratteristiche) vanno da 1D a 3D e includono le varianti più comuni, come il ritaglio e i livelli di convoluzione trasposti per ciascuna dimensionalità. La convoluzione 2D, che è stata ispirata dalla funzionalità della corteccia visiva, è comunemente usata per il riconoscimento delle immagini.

I livelli di pooling (downscaling) vanno da 1D a 3D e includono le varianti più comuni, come il pooling massimo e medio. I livelli connessi localmente si comportano come i livelli di convoluzione, tranne per il fatto che i pesi non sono condivisi. I livelli ricorrenti includono semplice (ricorrenza completamente connessa), gated, LSTM e altri; questi sono utili per l'elaborazione del linguaggio, tra le altre applicazioni. Gli strati di rumore aiutano a evitare l'eccessivo adattamento.

Set di dati Keras

Keras fornisce sette dei set di dati campione di deep learning comuni tramite la keras.datasetsclasse. Ciò include piccole immagini a colori cifar10 e cifar100, recensioni di film IMDB, argomenti di notizie Reuters, cifre scritte a mano da MNIST, immagini di moda MNIST e prezzi delle case a Boston.

Applicazioni ed esempi di Keras

Keras fornisce anche dieci modelli ben noti, denominati Applicazioni Keras, pre-addestrati per ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. È possibile utilizzarli per prevedere la classificazione delle immagini, estrarne le caratteristiche e perfezionare i modelli su un diverso insieme di classi.

A proposito, mettere a punto i modelli esistenti è un buon modo per accelerare la formazione. Ad esempio, puoi aggiungere strati come desideri, congelare gli strati di base per addestrare i nuovi strati, quindi sbloccare alcuni strati di base per mettere a punto l'allenamento. Puoi congelare un livello con l'impostazione layer.trainable = False.

Il repository di esempi di Keras contiene più di 40 modelli di esempio. Coprono modelli di visione, testo e sequenze e modelli generativi.

Distribuzione di Keras

I modelli Keras possono essere implementati su una vasta gamma di piattaforme, forse più di qualsiasi altro framework di deep learning. Ciò include iOS, tramite CoreML (supportato da Apple); Android, tramite il runtime Android TensorFlow; in un browser, tramite Keras.js e WebDNN; su Google Cloud, tramite TensorFlow-Serving; in un back-end di webapp Python; sulla JVM, tramite importazione del modello DL4J; e su Raspberry Pi.

Per iniziare con Keras, leggi la documentazione, controlla il repository di codice, installa TensorFlow (o un altro motore di backend) e Keras e prova il tutorial introduttivo per il modello Keras Sequential. Da lì puoi passare ad altri tutorial ed eventualmente esplorare gli esempi di Keras.