[PYTHON] Bildgebung eines neuronalen Netzwerks, das MNIST erkennt

Visualisieren Sie die Wirkung des Originalbilds auf jeden Knoten für die handschriftliche Nummernerkennung durch das neuronale Netzwerk.

Algorithmus

[Anmerkung] Dies ist ein Algorithmus, den ich mir ausgedacht habe. Es wurde nicht überprüft, wie genau der Aufprall gemessen werden kann.

Berechnen Sie den Wert jedes Knotens auf einer Quelle mit allen Nullpixeln als Vergleichsbasis.

Bereiten Sie das auszuwertende Bild vor. Fügen Sie nur ein Pixel in die Quelle ein, berechnen Sie den Wert jedes Knotens und vergleichen Sie den Wert mit, wenn alle 0 sind. Dies für alle Pixel zu tun, ist die Auswirkung eines bestimmten Pixels auf Knotenbasis.

Wenn Sie dies abbilden, können Sie den Effekt visuell sehen.

Vorbereitung

Ich werde das Beispiel von "Deep Learning von Grund auf neu" verwenden.

Da MNIST (handschriftliche Nummerndaten) bei der ersten Ausführung heruntergeladen wird, führen Sie das Skript aus, das MNIST verwendet.

$ cd ch03
$ python neuralnet_mnist.py
Accuracy:0.9352

Extrahieren Sie die folgenden zwei Dateien.

Führen Sie das folgende Skript aus, um das Bild zu generieren.

Bildbeispiel

Berechnen Sie das neuronale Netzwerk und extrahieren Sie die Knoten in der Mitte. Da sich das Bild vor und nach dem Auftragen von "Sigmoid" kaum ändert, werden "a1" und "a2" verworfen. Wie später gezeigt, wird "a3" jedoch aufgenommen, da es sich vor und nach dem Auftragen von "softmax" erheblich ändert.

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

[Addition 2017.08.26] z1 ist gut, da der Einfluss für jedes Pixel unabhängig ist, es stellte sich jedoch heraus, dass zwischen den Pixeln nach z2 ein Einfluss besteht, der nicht berücksichtigt wird. Wir überlegen, wie wir das Problem beheben können. Ich werde es hinzufügen, wenn es Fortschritte gibt.

Überprüfen Sie das Bild, das ganz weiß ist. Die Zahl stellt die Wahrscheinlichkeit dar, die durch "softmax" berechnet wird.

見出し.png white.png

Wenn es heller als die Hintergrundfarbe (grau) ist, ist es positiv, wenn es dunkel ist, ist es negativ und das mit einem großen positiven Gesamtwert hat eine höhere Wahrscheinlichkeit. Plus und Minus heben sich gegenseitig auf, sodass etwas, das deutlich sichtbar ist, nicht immer eine hohe Wahrscheinlichkeit hat. Wenn Sie durch "softmax" gehen, verlieren Sie die Schärfe und wissen nicht, was es ist.

Überprüfen Sie die Zahlen. Sie können sehen, dass es in Form von Zahlen aus dem ganz weißen Bild ausgehöhlt ist.

0.png

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

Referenz

Ich bezog mich darauf, wie man Python schreibt.

Recommended Posts

Bildgebung eines neuronalen Netzwerks, das MNIST erkennt
Träumt das neuronale Netz von einer elektrischen Maus?
Richtlinien für das Design der Ausgangsschicht neuronaler Netze
Hinweise zu neuronalen Netzen
Das von / etc / shadow
[PyTorch Tutorial ③] NEURALE NETZWERKE
Aufbau eines neuronalen Netzwerks, das XOR durch Z3 reproduziert