Wolfram Language

Das Innere eines neuronales Netzes visualisieren

Um die innere Funktionsweise eines trainierten Bildklassifikationsnetzwerks zu verstehen, kann man versuchen, die Bildfeatures zu visualisieren, auf die die Neuronen im Netzwerk reagieren.

Laden Sie ein vortrainiertes Netz.

Die Bildmerkmale der Neuronen in der ersten Faltungsschicht werden einfach durch ihre Faltungskerne vorgegeben.

Diese Neuronen erkennen Low-Level-Features wie Kanten und Linien, Graustufen und Farben.

Dieser einfache Ansatz funktioniert jedoch nicht bei Neuronen in Schichten, die weiter unten in der Verarbeitungskette des Netzwerks liegen. Wir verwenden daher den Deep-Dream-Algorithmus von Google, um neuronale Merkmale in zufälligen Bildern zu erzeugen.

Geben Sie zunächst eine Schicht und ein Merkmal an, das Sie visualisieren möchten.

Um einen Eindruck davon zu bekommen, was ein Neuron erkennt, schneiden wir das Netz an einem bestimmten Layer ab und fügen zusätzliche Layer hinzu, die die gesamte Aktivität der jeweiligen Neuronen extrahieren.

Wenn Sie ein zufälliges Eingangsbild ständig mit dem Backpropagation-Gradienten des Netzes aktualisieren, um den Ausgang dieses Netzes zu maximieren, entsteht ein Bild, dass hauptsächlich das betreffende Neuron aktiviert. Das resultierende Bild zeigt also die Features, auf die das Neuron reagiert.

Erstellen Sie ein durch und durch zufälliges Ausgangsbild.

Der Befehl NetPortGradient["Input"] liefert den Gradienten des Backpropagation-Algorithmus am Eingangsport unseres Netzes. Der folgende Code normalisiert den maximalen Gradientenkoeffizienten auf 1/8 und wandelt ihn in ein Bild um.

Bevor wir unser Bild iterativ mit dem obigen Gradientenbild aktualisieren, müssen wir eine Jitter-Funktion hinzufügen, die das Bild um einen einen kleinen Wert verschiebt.

Das Hinzufügen eines zufälligen Jitters in die folgende Schleife sorgt dafür, die lokalen Artefakte der Backpropagation-Lernregel zu verteilen und und führt zu einem regelmäßigerem Bild.

Wenn Sie das zufällige Ausgangsbild 256 Mal aktualisieren, ergibt sich das folgende Bild. Die betreffenden Neuronen erkennen scheinbar kleine Vögel oder Küken.

Wiederholen Sie den obigen Vorgang für andere Funktionen in anderen Schichten. Sie werden feststellen, dass Neuronen in den ersten Schichten einfache Features wie Strukturen und Muster erkennen, während Neuronen in tiefen Schichten komplexere Features erlernen, wie zum Beispiel ganze Tiergesichter.

Features der Inception-Schicht 3b.

Features der Inception-Schicht 4d.

Verwandte Beispiele

en es fr ja ko pt-br zh