[PYTHON] Imagerie d'un réseau de neurones qui reconnaît MNIST

Visualisez l'effet de l'image originale sur chaque nœud pour la reconnaissance des nombres manuscrits par le réseau neuronal.

algorithme

[Note] C'est un algorithme que j'ai mis au point. Il n'a pas été vérifié avec quelle précision l'impact peut être mesuré.

Calculez la valeur de chaque nœud sur une source avec tous les pixels nuls comme base de comparaison.

Préparez l'image à évaluer. Mettez un seul pixel dans la source, calculez la valeur de chaque nœud et comparez la valeur avec quand tous sont 0. Faire cela pour tous les pixels est l'effet d'un pixel particulier sur une base nœud par nœud.

En imaginant cela, vous pouvez voir l'effet visuellement.

Préparation

J'utiliserai l'exemple de "Deep Learning from scratch".

Puisque MNIST (données numériques manuscrites) est téléchargé à la première exécution, exécutez le script qui utilise MNIST.

$ cd ch03
$ python neuralnet_mnist.py
Accuracy:0.9352

Extrayez les deux fichiers suivants.

Exécutez le script suivant pour générer l'image.

Exemple d'image

Calculez le réseau neuronal et extrayez les nœuds du milieu. Puisque l'image change à peine avant et après l'application de «sigmoïde», «a1, a2» est écarté. Cependant, comme on le verra plus loin, «a3» est repris car il change considérablement avant et après l'application de «softmax».

def predict(x):
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    z3 = softmax(a3)
    return z1, z2, a3, z3

[Ajout 2017.08.26] z1 est bon car l'influence est indépendante pour chaque pixel, mais il s'est avéré qu'il y a une influence entre les pixels après z2 et qu'elle n'est pas prise en compte. Nous réfléchissons à comment y remédier. Je l'ajouterai s'il y a des progrès.

Vérifiez l'image qui est entièrement blanche. Le nombre représente la probabilité calculée par "softmax".

見出し.png white.png

S'il est plus clair que la couleur de fond (gris), il sera positif, s'il est sombre, il sera négatif et celui avec un grand positif global aura une probabilité plus élevée. Les plus et les moins s'annulent, il n'est donc pas toujours possible d'avoir une forme claire. Si vous passez par «softmax», vous perdrez la netteté et vous ne saurez pas ce que c'est.

Vérifiez les chiffres. Vous pouvez voir qu'il est évidé sous la forme de nombres de l'image entièrement blanche.

0.png

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

référence

Je me suis référé à la façon d'écrire Python.

Recommended Posts

Imagerie d'un réseau de neurones qui reconnaît MNIST
Les réseaux de neurones rêvent-ils d'une souris électrique?
Lignes directrices pour la conception de la couche de sortie des réseaux de neurones
Remarques sur les réseaux de neurones
Celui de / etc / shadow
[Tutoriel PyTorch ③] RÉSEAUX NEURAUX
Construction d'un réseau neuronal qui reproduit XOR par Z3