Créer un modèle d'apprentissage profond
Notre modèle de réseau neuronal consistera en une pile linéaire de couches. Pour définir un tel modèle, nous appelons leSequential fonction -
model = Sequential()
Couche d'entrée
Nous définissons la couche d'entrée, qui est la première couche de notre réseau à l'aide de l'instruction de programme suivante -
model.add(Dense(512, input_shape=(784,)))
Cela crée une couche avec 512 nœuds (neurones) avec 784 nœuds d'entrée. Ceci est illustré dans la figure ci-dessous -
Notez que tous les nœuds d'entrée sont entièrement connectés à la couche 1, c'est-à-dire que chaque nœud d'entrée est connecté aux 512 nœuds de la couche 1.
Ensuite, nous devons ajouter la fonction d'activation pour la sortie de la couche 1. Nous utiliserons ReLU comme activation. La fonction d'activation est ajoutée à l'aide de l'instruction de programme suivante -
model.add(Activation('relu'))
Ensuite, nous ajoutons un abandon de 20% en utilisant la déclaration ci-dessous. Le décrochage est une technique utilisée pour empêcher le modèle de surajustement.
model.add(Dropout(0.2))
À ce stade, notre couche d'entrée est entièrement définie. Ensuite, nous ajouterons un calque caché.
Couche cachée
Notre couche cachée sera composée de 512 nœuds. L'entrée de la couche masquée provient de notre couche d'entrée précédemment définie. Tous les nœuds sont entièrement connectés comme dans le cas précédent. La sortie de la couche cachée ira à la couche suivante du réseau, qui sera notre couche finale et de sortie. Nous utiliserons la même activation ReLU que pour la couche précédente et un abandon de 20%. Le code pour ajouter cette couche est donné ici -
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
Le réseau à ce stade peut être visualisé comme suit -
Ensuite, nous ajouterons la couche finale à notre réseau, qui est la couche de sortie. Notez que vous pouvez ajouter n'importe quel nombre de couches cachées en utilisant le code similaire à celui que vous avez utilisé ici. L'ajout de couches supplémentaires rendrait le réseau complexe pour la formation; cependant, ce qui donne un avantage certain de meilleurs résultats dans de nombreux cas, mais pas tous.
Couche de sortie
La couche de sortie se compose de seulement 10 nœuds car nous voulons classer les images données en 10 chiffres distincts. Nous ajoutons cette couche, en utilisant l'instruction suivante -
model.add(Dense(10))
Comme nous voulons classer la sortie en 10 unités distinctes, nous utilisons l'activation softmax. Dans le cas de ReLU, la sortie est binaire. Nous ajoutons l'activation en utilisant la déclaration suivante -
model.add(Activation('softmax'))
À ce stade, notre réseau peut être visualisé comme indiqué dans le diagramme ci-dessous -
À ce stade, notre modèle de réseau est entièrement défini dans le logiciel. Exécutez la cellule de code et s'il n'y a pas d'erreur, vous obtiendrez un message de confirmation à l'écran comme indiqué dans la capture d'écran ci-dessous -
Ensuite, nous devons compiler le modèle.