Creazione di un modello di deep learning
Il nostro modello di rete neurale consisterà in una pila lineare di livelli. Per definire un tale modello, chiamiamoSequential funzione -
model = Sequential()
Livello di input
Definiamo il livello di input, che è il primo livello nella nostra rete utilizzando la seguente istruzione di programma:
model.add(Dense(512, input_shape=(784,)))
Questo crea un livello con 512 nodi (neuroni) con 784 nodi di input. Questo è illustrato nella figura seguente:
Si noti che tutti i nodi di input sono completamente collegati al Layer 1, ovvero ogni nodo di input è connesso a tutti i 512 nodi del Layer 1.
Successivamente, dobbiamo aggiungere la funzione di attivazione per l'output del Livello 1. Useremo ReLU come nostra attivazione. La funzione di attivazione viene aggiunta utilizzando la seguente istruzione del programma:
model.add(Activation('relu'))
Successivamente, aggiungiamo Dropout del 20% utilizzando la dichiarazione seguente. Il dropout è una tecnica utilizzata per impedire l'overfitting del modello.
model.add(Dropout(0.2))
A questo punto, il nostro livello di input è completamente definito. Successivamente, aggiungeremo un livello nascosto.
Livello nascosto
Il nostro livello nascosto sarà composto da 512 nodi. L'input per il livello nascosto proviene dal nostro livello di input definito in precedenza. Tutti i nodi sono completamente connessi come nel caso precedente. L'output del livello nascosto andrà al livello successivo nella rete, che sarà il nostro livello finale e di output. Useremo la stessa attivazione ReLU del layer precedente e un dropout del 20%. Il codice per l'aggiunta di questo livello viene fornito qui:
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
La rete in questa fase può essere visualizzata come segue:
Successivamente, aggiungeremo il livello finale alla nostra rete, che è il livello di output. Nota che puoi aggiungere un numero qualsiasi di livelli nascosti usando il codice simile a quello che hai usato qui. L'aggiunta di più livelli renderebbe la rete complessa per la formazione; tuttavia, dando un netto vantaggio di risultati migliori in molti casi, anche se non tutti.
Livello di output
Il livello di output è costituito da soli 10 nodi poiché vogliamo classificare le immagini date in 10 cifre distinte. Aggiungiamo questo livello, usando la seguente dichiarazione:
model.add(Dense(10))
Dato che vogliamo classificare l'uscita in 10 unità distinte, utilizziamo l'attivazione softmax. In caso di ReLU, l'uscita è binaria. Aggiungiamo l'attivazione utilizzando la seguente dichiarazione:
model.add(Activation('softmax'))
A questo punto, la nostra rete può essere visualizzata come mostrato nel diagramma sottostante -
A questo punto, il nostro modello di rete è completamente definito nel software. Esegui la cella del codice e se non ci sono errori, riceverai un messaggio di conferma sullo schermo come mostrato nello screenshot qui sotto -
Successivamente, dobbiamo compilare il modello.