Wie visualisieren Sie neuronale Netzwerkarchitekturen?

79

Wenn man eine Arbeit schreibt / eine Präsentation über ein Thema macht, das sich mit neuronalen Netzwerken befasst, visualisiert man normalerweise die Netzwerkarchitektur.

Was sind gute / einfache Möglichkeiten, um gängige Architekturen automatisch zu visualisieren?

Martin Thoma
quelle
1
Gerade gefunden reddit.com/r/MachineLearning/comments/4sgsn9/…
Martin Thoma
1
Ich schrieb einfache Diagramme von verschachtelten neuronalen Netzen mit einer Übersicht über Visualisierungsansätze für tiefes Lernen (sowohl manuell als auch automatisch). Ich habe viel Inspiration und Links von diesem Thread bekommen - danke!
Piotr Migdal

Antworten:

25

Tensorflow, Keras, MXNet, PyTorch

Wenn das neuronale Netzwerk als Tensorflow-Diagramm angegeben ist, können Sie dieses Diagramm mit TensorBoard visualisieren .

So sieht der MNIST CNN aus:

Bildbeschreibung hier eingeben

Sie können Namen / Bereiche (wie "Dropout", "Softmax", "FC1", "Conv1", "Conv2") selbst hinzufügen.

Interpretation

Im Folgenden geht es nur um das linke Diagramm. Ich ignoriere die 4 kleinen Grafiken auf der rechten Hälfte.

Jede Box ist eine Ebene mit Parametern, die gelernt werden können. Zum Schluss fließen die Informationen von unten nach oben. Ellipsen sind Ebenen, die keine gelernten Parameter enthalten.

Die Farbe der Kästchen hat keine Bedeutung.

Ich bin mir nicht sicher, welchen Wert die gestrichelten Kästchen ("Farbverläufe", "Adam", "Speichern") haben.

Martin Thoma
quelle
es ist gut, ich versuche, den Namen wie conv1, conv2 usw. zu vermeiden. Ich möchte den ganzen Namen von conv später als CONV machen. Wie mache ich das?
Sudip Das
+1. Es ist aber nicht nur für TF: MXNet und Pytorch haben auch Unterstützung
Jakub Bartczuk
@SudipDas Sie können den Layern Namen im Code hinzufügen, die beim Plotten angezeigt werden.
Ben
Wie ich den Namen jeder Ebene als "CONV" anzeigen werde, wenn ich ihn als "CONV" jeder Ebene schreibe, erhalte ich eine Fehlermeldung, da jede Ebene einen eindeutigen Namen als tf-Regeln haben sollte, ABER ich möchte wissen, ist gibt es einen anderen Weg, um dieses Problem zu überwinden? @Ben
Sudip Das
1
@onof Ich habe den Link behoben
Martin Thoma
23

Ich habe kürzlich ein Tool zum Zeichnen von NN-Architekturen und zum Exportieren von SVG erstellt, NN-SVG

Bildbeschreibung hier eingeben

Alex Lenail
quelle
1
Download SVG funktioniert nicht
Bild
funktioniert bei mir 23.01.19. Wenn Sie immer noch ein Problem haben, können Sie es gerne öffnen.
Alex Lenail
1
Dies ist die einzig richtige Antwort
ArtificiallyIntelligence
tolles Werkzeug. Ich bemerkte jedoch, dass im AlexNet-Stil die Abmessungen der Tensoren fälschlicherweise dargestellt wurden (Breiten- und
Höhenabmessungen
11

Ich würde ASCII-Visualisierungen mit keras-sequential-ascii hinzufügen (Haftungsausschluss: Ich bin der Autor).

Ein kleines Netzwerk für CIFAR-10 (aus diesem Tutorial ) wäre:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

           Input   #####     32   32    3
          Conv2D    \|/  -------------------       896     2.1%
            relu   #####     30   30   32
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####     15   15   32
          Conv2D    \|/  -------------------     18496    43.6%
            relu   #####     13   13   64
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####      6    6   64
         Flatten   ||||| -------------------         0     0.0%
                   #####        2304
           Dense   XXXXX -------------------     23050    54.3%
         softmax   #####          10

Für VGG16 wäre es:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

          Input   #####      3  224  224
     InputLayer     |   -------------------         0     0.0%
                  #####      3  224  224
  Convolution2D    \|/  -------------------      1792     0.0%
           relu   #####     64  224  224
  Convolution2D    \|/  -------------------     36928     0.0%
           relu   #####     64  224  224
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####     64  112  112
  Convolution2D    \|/  -------------------     73856     0.1%
           relu   #####    128  112  112
  Convolution2D    \|/  -------------------    147584     0.1%
           relu   #####    128  112  112
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    128   56   56
  Convolution2D    \|/  -------------------    295168     0.2%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    256   28   28
  Convolution2D    \|/  -------------------   1180160     0.9%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512    7    7
        Flatten   ||||| -------------------         0     0.0%
                  #####       25088
          Dense   XXXXX ------------------- 102764544    74.3%
           relu   #####        4096
          Dense   XXXXX -------------------  16781312    12.1%
           relu   #####        4096
          Dense   XXXXX -------------------   4097000     3.0%
        softmax   #####        1000
Piotr Migdal
quelle
11

Es gibt ein Open-Source-Projekt namens Netron

Netron ist ein Viewer für Modelle für neuronales Netzwerk, Deep Learning und maschinelles Lernen.

Netron unterstützt ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) und TensorFlow Lite (.tflite). Netron bietet experimentelle Unterstützung für Caffe (.caffemodel), Caffe2 (predict_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) und TensorFlow (.pb, .meta).

Bildbeschreibung hier eingeben

han4wluc
quelle
8

Keras

Das Modul keras.utils.vis_utils bietet Dienstprogrammfunktionen zum Plotten eines Keras-Modells (mithilfe von graphviz).

Im Folgenden wird ein Netzwerkmodell gezeigt, bei dem die erste verborgene Ebene 50 Neuronen aufweist und 104 Eingabevariablen erwartet.

plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)

Bildbeschreibung hier eingeben

Mingxue
quelle
Kann ich es im LaTex-kompatiblen Format verwenden?
pushpen.paul
8

Das Python-Paket conxkann Netzwerke mit Aktivierungen mit der Funktion net.picture()zum Erzeugen von SVG-, PNG- oder PIL-Bildern wie folgt visualisieren :

Bildbeschreibung hier eingeben

Conx basiert auf Keras und kann Keras-Modelle einlesen. Die Farbzuordnung für jede Bank kann geändert werden und es können alle Bankarten angezeigt werden.

Weitere Informationen finden Sie unter: http://conx.readthedocs.io/en/latest/

Doug Blank
quelle
6

Ich habe an einem Drag-and-Drop-Visualizer für neuronale Netze (und mehr) gearbeitet. Hier ist ein Beispiel für eine Visualisierung für eine LeNet-ähnliche Architektur. Eine Visualisierung einer LeNet-ähnlichen Architektur Modelle mit Fan-Out und Fan-In lassen sich ebenfalls recht einfach modellieren. Sie können die Website unter https://math.mit.edu/ennui/ besuchen.

Jesse
quelle
Mein Browser stürzt ab, wenn ich Train
datdinhquoc
1
Vielen Dank fürs Auschecken. Ja, dieser Bug ist kürzlich aufgetaucht und scheint das Ergebnis einiger kürzlich vorgenommener Änderungen an WebGL in Chrome zu sein. Alles sollte in Firefox funktionieren. Ich werde dich aktualisieren, wenn ich mehr weiß.
Jesse
tks, dein visualizer ist erstaunlich, sieht größer aus als tf playground :)
datdinhquoc
1
Danke! Lassen Sie mich wissen, wenn Sie Probleme oder Ideen haben. Wir haben auch lustige Dinge wie Codegenerierung!
Jesse
5

In R nnetgibt es keine Plotfunktion, aber Code dafür wird hier bereitgestellt .

Alternativ können Sie das neuere und IMHO-bessere Paket verwenden, neuralnetdas eine plot.neuralnetFunktion enthält. Sie können also einfach Folgendes tun:

data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))

neuralnet

neuralnetwird nicht so oft verwendet, nnetda nnetes viel älter ist und mit r-cran geliefert wird. Es neuralnetverfügt jedoch über mehr Trainingsalgorithmen, einschließlich einer stabilen Backpropagation, die selbst in Paketen wie Tensorflow fehlt, die für die Auswahl von Hyperparametern wesentlich robuster ist und insgesamt über mehr Funktionen verfügt.

Ricardo Cruz
quelle
Sie sollten den aktualisierten Link für den Code von NNet in R beckmw.wordpress.com/2013/11/14/…
wacax
4

Es gibt einige neuartige alternative Bemühungen zur Visualisierung neuronaler Netze.

Bitte beachten Sie diese Artikel:

Atemberaubende KI-Gehirnscans zeigen, was Maschinen sehen, wenn sie neue Fähigkeiten erlernen

In einem KI-Gehirn - Wie sieht maschinelles Lernen aus?

Diese Ansätze sind mehr auf die Visualisierung des neuronalen Netzwerkbetriebs ausgerichtet, die NN-Architektur ist jedoch auch in den resultierenden Diagrammen etwas sichtbar.

Beispiele:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

VividD
quelle
21
Bitte erläutern Sie, was wir hier sehen. Es sieht wunderschön aus, aber ich verstehe nicht, wie die ausgefallenen Bilder das Verständnis der Funktionsweise des Netzwerks unterstützen.
Martin Thoma
Ihre abfällige Verwendung des Begriffs "Phantasiebilder" gefällt mir nicht. @ Martin
VividD
9
Ich wollte dich nicht angreifen, aber deine übermäßig defensive Antwort, ohne meine Frage zu beantworten, spricht für sich. - Ich habe dem Diagramm "Legoboxen" einen "Interpretationsteil" hinzugefügt.
Martin Thoma
1
Übrigens: Der zweite Link ist tot.
Martin Thoma
4
@MartinThoma Es handelt sich eindeutig um Datenkunst, nicht um Daten (siehe lisacharlotterost.github.io/2015/12/19/… ).
Piotr Migdal
3

Das ist nicht gerade praktisch für Artikel, aber sehr nützlich, um Leuten zu zeigen, die nicht viel über neuronale Netze wissen, wie ihre Topologie aussehen könnte. Mit dieser Javascript-Bibliothek (Neataptic) können Sie Ihr Netzwerk visualisieren:

Bildbeschreibung hier eingeben

Thomas W
quelle
3

Lesen Sie den beliebten Aufsatz " Verständnis neuronaler Netze durch Tiefenvisualisierung", in dem die Visualisierung von Faltungsnetzen behandelt wird. Die Implementierung zeigt nicht nur jede Ebene an, sondern zeigt auch die Aktivierungen, Gewichte, Dekonvolutionen und viele andere Dinge, die im Papier ausführlich diskutiert werden. Der Code ist in caffe'. Das Interessante ist, dass Sie das vortrainierte Modell durch Ihr eigenes ersetzen können.

Medien
quelle
1

Netscope ist mein alltägliches Werkzeug für Caffe-Modelle.

Bildbeschreibung hier eingeben

Dmytro Prylipko
quelle