Comment visualisez-vous les architectures de réseaux de neurones?

80

Lors de la rédaction d'un article / d'une présentation sur un sujet concernant les réseaux de neurones, on visualise généralement l'architecture du réseau.

Quels sont les moyens bons / simples de visualiser automatiquement les architectures communes?

Martin Thoma
la source
1
Je viens de trouver reddit.com/r/MachineLearning/comments/4sgsn9/…
Martin Thoma
1
J'ai écrit des schémas simples de réseaux de neurones enchevêtrés avec une étude des approches de visualisation en apprentissage en profondeur (manuelle et automatique). J'ai eu beaucoup d'inspiration, et des liens, de ce fil - merci!
Piotr Migdal

Réponses:

25

Tensorflow, Keras, MXNet, PyTorch

Si le réseau de neurones est présenté sous forme de graphique Tensorflow, vous pouvez visualiser ce graphique avec TensorBoard .

Voici à quoi ressemble le MNIST CNN:

entrez la description de l'image ici

Vous pouvez ajouter des noms / champs (comme "dropout", "softmax", "fc1", "conv1", "conv2") vous-même.

Interprétation

Ce qui suit concerne uniquement le graphique de gauche. J'ignore les 4 petits graphiques sur la moitié droite.

Chaque case est une couche avec des paramètres qui peuvent être appris. Pour inférence, l'information circule de bas en haut. Les ellipses sont des couches qui ne contiennent pas de paramètres appris.

La couleur des cases n'a pas de sens.

Je ne suis pas sûr de la valeur des petites boîtes en pointillés ("gradients", "Adam", "enregistrer").

Martin Thoma
la source
c'est bon, j'essaye d'éviter le nom comme conv1, conv2 etc, je veux faire tout le nom de conv plus tard comme CONV, comment je vais faire ??
Sudip Das
+1 Mais pas seulement pour TF: MXNet et Pytorch ont aussi un soutien
Jakub Bartczuk
@SudipDas Vous pouvez ajouter des noms dans le code aux couches, qui apparaîtront au fur et à mesure que vous les tracerez.
Ben
Comment je vais montrer le nom de chaque couche comme "CONV", si je l'écris comme "CONV" de chaque couche, alors je vais obtenir une erreur, parce que chaque couche devrait avoir un nom unique comme règles tf, MAIS je veux savoir, est Y at-il un autre moyen de surmonter ce problème? @Ben
Sudip Das
1
@onof j'ai corrigé le lien
Martin Thoma
23

J'ai récemment créé un outil de dessin d'architectures NN et d'exportation SVG, appelé NN-SVG.

entrez la description de l'image ici

Alex Lenail
la source
1
Télécharger le fichier SVG ne fonctionne pas
image
travaille pour moi le 23/01/19. Si vous rencontrez toujours un problème, n'hésitez pas à l'ouvrir.
Alex Lenail
1
C’est la seule bonne solution
ArtificiallyIntelligence
outil génial. Cependant, j'ai remarqué que dans le style AlexNet, les dimensions des Tenseurs étaient représentées par erreur (dimensions de largeur et de hauteur)
FlySoFast
11

J'ajouterais des visualisations ASCII à l'aide de keras-sequential-ascii (disclaimer: je suis l'auteur).

Un petit réseau pour CIFAR-10 (tiré de ce tutoriel ) serait:

       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

Pour VGG16, ce serait:

       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
la source
11

Il y a un projet open source appelé Netron

Netron est un visualiseur de modèles de réseaux de neurones, d'apprentissage en profondeur et d'apprentissage automatique.

Netron prend en charge ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) et TensorFlow Lite (.tflite). Netron dispose d'un support expérimental pour Caffe (.caffemodel), Caffe2 (predict_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) et TensorFlow (.pb, .meta).

entrez la description de l'image ici

han4wluc
la source
10

Voici un autre moyen: dotnets , en utilisant Graphviz , fortement inspiré de cet article de Thiago G. Martins.

exemple de dotnets

bytesinflight
la source
8

Keras

Le module keras.utils.vis_utils fournit des fonctions utilitaires permettant de tracer un modèle de Keras (à l'aide de graphviz).

Ce qui suit montre un modèle de réseau selon lequel la première couche cachée contient 50 neurones et attend 104 variables d'entrée.

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

entrez la description de l'image ici

Mingxue
la source
Puis-je l'utiliser au format compatible LaTex?
pushpen.paul
8

Le paquet Python conxpeut visualiser des réseaux avec des activations avec la fonction net.picture()pour produire des images SVG, PNG ou PIL comme ceci:

entrez la description de l'image ici

Conx est construit sur Keras et peut lire dans les modèles de Keras. La palette de couleurs de chaque banque peut être modifiée et peut afficher tous les types de banque.

Plus d'informations peuvent être trouvées sur: http://conx.readthedocs.io/en/latest/

Doug Blank
la source
6

J'ai travaillé sur un visualiseur de réseau neuronal à glisser et déposer (et plus encore). Voici un exemple de visualisation pour une architecture de type LeNet. Une visualisation d'une architecture de type LeNet Les modèles avec fan-out et fan-in sont également assez faciles à modéliser. Vous pouvez visiter le site Web à l' adresse https://math.mit.edu/ennui/

Jesse
la source
mon navigateur ne cesse de
planter
1
Merci d'avoir jeté un coup d'œil. Oui, ce bogue est apparu récemment et semble résulter de modifications récentes apportées à WebGL sur Chrome. Tout devrait fonctionner sur Firefox. Je vous tiendrai au courant dès que j'en saurai plus.
Jesse
tks, ton visualiseur est incroyable, a l’air plus grand que le tf playground :)
datdinhquoc
1
Je vous remercie! Faites-moi savoir si vous avez des problèmes ou des idées. Nous avons aussi des choses amusantes comme la génération de code!
Jesse
5

En R, nnetne vient pas avec une fonction de tracé, mais le code pour cela est fourni ici .

Alternativement, vous pouvez utiliser le meilleur paquet plus récent et meilleur IMHO appelé neuralnetqui comporte une plot.neuralnetfonction, de sorte que vous pouvez simplement faire:

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

neuralnet

neuralnetn'est pas utilisé autant que nnetparce qu'il nnetest beaucoup plus vieux et est livré avec r-cran. Mais neuralneta plus d'algorithmes de formation, y compris la rétropropagation résiliente qui fait défaut, même dans des packages comme Tensorflow, et est beaucoup plus robuste pour les choix d'hyperparamètre, et possède davantage de fonctionnalités.

Ricardo Cruz
la source
Vous devez ajouter le lien mis à jour pour le code NNet dans R beckmw.wordpress.com/2013/11/14/…
wacax
4

Il existe quelques nouveaux efforts alternatifs sur la visualisation de réseaux neuronaux.

S'il vous plaît voir ces articles:

De superbes 'analyses du cerveau de l'IA' révèlent ce que les machines voient lorsqu'elles acquièrent de nouvelles compétences

Dans un cerveau d'intelligence artificielle - À quoi ressemble l'apprentissage automatique?

Ces approches sont davantage orientées vers la visualisation du fonctionnement du réseau neuronal. Cependant, l'architecture NN est également visible sur les diagrammes résultants.

Exemples:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

VividD
la source
21
S'il vous plaît expliquer ce que nous voyons ici. Cela a l'air beau, mais je ne comprends pas comment les images sophistiquées aident à comprendre le fonctionnement du réseau.
Martin Thoma
Je n'aime pas votre utilisation péjorative du terme "images de fantaisie". @Martin
VividD
9
Je ne voulais pas vous attaquer, mais votre réponse trop défensive sans répondre à ma question parle d'elle-même. - J'ai ajouté une partie "interprétation" au diagramme "lego boxes".
Martin Thoma
1
Au fait: le deuxième lien est mort.
Martin Thoma
4
@MartinThoma Il est clair que l'art des données, pas les données, est visible (vide lisacharlotterost.github.io/2015/12/19/… ).
Piotr Migdal
3

Non utile en soi pour les articles, mais très utile pour montrer à des personnes qui ne connaissent pas beaucoup les réseaux de neurones à quoi ressemble leur topologie. Cette bibliothèque Javascript (Neataptic) vous permet de visualiser votre réseau:

entrez la description de l'image ici

Thomas W
la source
3

Vous pouvez lire le document populaire Comprendre les réseaux de neurones par la visualisation profonde, qui traite de la visualisation des réseaux de convolution. Son implémentation affiche non seulement chaque couche, mais également les activations, les pondérations, les déconvolutions et de nombreuses autres choses discutées en profondeur dans le document. Son code est en caffe'. La partie intéressante est que vous pouvez remplacer le modèle pré-formé par le vôtre.

Médias
la source
1

Netscope est mon outil quotidien pour les modèles Caffe.

entrez la description de l'image ici

Dmytro Prylipko
la source