Jak wizualizujesz architektury sieci neuronowych?


79

Podczas pisania pracy / prezentacji na temat sieci neuronowych zwykle wizualizuje się architekturę sieci.

Jakie są dobre / proste sposoby automatycznej wizualizacji popularnych architektur?




1
Napisałem Proste diagramy zwiniętych sieci neuronowych z ankietą metod wizualizacji dogłębnej nauki (zarówno manualnych, jak i automatycznych). Mam wiele inspiracji i linków z tego wątku - dzięki!
Piotr Migdal

Odpowiedzi:


25

Tensorflow, Keras, MXNet, PyTorch

Jeśli sieć neuronowa jest podana jako wykres Tensorflow, możesz zwizualizować ten wykres za pomocą TensorBoard .

Oto jak wygląda MNIST CNN:

wprowadź opis zdjęcia tutaj

Możesz dodawać nazwy / zakresy (takie jak „dropout”, „softmax”, „fc1”, „conv1”, „conv2”).

Interpretacja

Poniższe informacje dotyczą tylko lewego wykresu. Ignoruję 4 małe wykresy po prawej stronie.

Każde pudełko jest warstwą z parametrami, których można się nauczyć. W celu wnioskowania informacje przepływają od dołu do góry. Elipsy to warstwy, które nie zawierają wyuczonych parametrów.

Kolor skrzynek nie ma znaczenia.

Nie jestem pewien wartości małych przerywanych pól („gradienty”, „Adam”, „zapisz”).


to dobrze, staram się unikać nazwy jak conv1, conv2 itp. Chcę później podać nazwę konw. jako CONV, jak to zrobię ??
Sudip Das

+1. Nie dotyczy to jednak tylko TF: MXNet i Pytorch też mają wsparcie
Jakub Bartczuk

@SudipDas Możesz dodawać nazwy w kodzie do warstw, które będą się pojawiać podczas kreślenia.
Ben

Jak pokażę nazwę każdej warstwy jako „CONV”, jeśli napiszę ją jako „CONV” każdej warstwy, wtedy dostanę błąd, ponieważ każda warstwa powinna mieć unikalną nazwę zgodnie z regułami tf, ALE chcę wiedzieć, jest jest jakiś inny sposób na rozwiązanie tego problemu? @Ben
Sudip Das

1
@onof Naprawiłem link
Martin Thoma

22

Niedawno stworzyłem narzędzie do rysowania architektur NN i eksportowania SVG, o nazwie NN-SVG

wprowadź opis zdjęcia tutaj


1
Pobierz SVG nie działa
zdjęcie

działa dla mnie 1/23/19. Jeśli nadal masz problem, otwórz go.
Alex Lenail

1
to jedyna słuszna odpowiedź
sztuczna

niesamowite narzędzie. Zauważyłem jednak, że w stylu AlexNet wymiary Tensorów zostały błędnie przedstawione (wymiary szerokości i wysokości)
FlySoFast


11

Dodałbym wizualizacje ASCII przy użyciu keras-sekwencyjnego-ascii (zastrzeżenie: jestem autorem).

Mała sieć dla CIFAR-10 (z tego samouczka ) to:

       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

W przypadku VGG16 byłoby to:

       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

11

Istnieje projekt open source o nazwie Netron

Netron to przeglądarka modeli sieci neuronowych, głębokiego uczenia i uczenia maszynowego.

Netron obsługuje ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) i TensorFlow Lite (.tflite). Netron ma eksperymentalne wsparcie dla Caffe (.caffemodel), Caffe2 (przewidywana_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) i TensorFlow (.pb, .meta).

wprowadź opis zdjęcia tutaj



8

Keras

Moduł keras.utils.vis_utils zapewnia funkcje użytkowe wykreślić modelu Keras (użyciu graphviz)

Poniżej pokazano model sieci, w którym pierwsza ukryta warstwa ma 50 neuronów i oczekuje 104 zmiennych wejściowych.

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

wprowadź opis zdjęcia tutaj


Czy mogę go używać w formacie kompatybilnym z LaTex?
pushpen.paul

8

Pakiet Python conxmoże wizualizować sieci z aktywacjami z funkcją net.picture()tworzenia obrazów SVG, PNG lub PIL, takich jak:

wprowadź opis zdjęcia tutaj

Conx jest zbudowany na Keras i może czytać w modelach Keras. Mapa kolorów w każdym banku może zostać zmieniona i może wyświetlać wszystkie typy banków.

Więcej informacji można znaleźć na stronie : http://conx.readthedocs.io/en/latest/


6

Pracowałem nad wizualizatorem sieci neuronowej typu przeciągnij i upuść (i nie tylko). Oto przykład wizualizacji architektury podobnej do LeNet. Wizualizacja architektury podobnej do LeNet Modele z funkcją Fan-Out i Fan-In również można łatwo modelować. Możesz odwiedzić stronę internetową https://math.mit.edu/ennui/


moja przeglądarka
ulega

1
Dzięki za sprawdzenie. Tak, ten błąd pojawił się niedawno i wydaje się, że jest wynikiem kilku ostatnich zmian w WebGL w Chrome. Wszystko powinno działać w przeglądarce Firefox. Zaktualizuję cię, gdy będę wiedział więcej.
Jesse

tks, twój wizualizator jest niesamowity, wygląda lepiej niż plac zabaw tf :)
datdinhquoc

1
Dziękuję Ci! Daj mi znać, jeśli masz problemy lub pomysły. Bawimy się też generowaniem kodu!
Jesse

5

W języku R nnetnie ma funkcji drukowania, ale kod do tego jest podany tutaj .

Alternatywnie możesz użyć nowszego i lepszego pakietu IMHO o nazwie, neuralnetktóry zawiera plot.neuralnetfunkcję, dzięki czemu możesz po prostu:

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

sieć neuronowa

neuralnetnie jest używany tak często, nnetponieważ nnetjest znacznie starszy i jest dostarczany z r-cran. Ale neuralnetma więcej algorytmów szkoleniowych, w tym sprężystą propagację wsteczną, której brakuje nawet w pakietach takich jak Tensorflow, i jest znacznie bardziej odporny na wybory hiperparametrów i ma ogólnie więcej funkcji.


Należy dodać zaktualizowany link do kodu NNet w R beckmw.wordpress.com/2013/11/14/…
wacax

4

Istnieje kilka nowatorskich alternatywnych sposobów wizualizacji sieci neuronowej.

Zobacz te artykuły:

Oszałamiające „skany mózgu AI” pokazują, jakie maszyny widzą, gdy uczą się nowych umiejętności

Wewnątrz „mózgu” AI - Jak wygląda uczenie maszynowe?

Podejścia te są bardziej zorientowane na wizualizację działania sieci neuronowej, jednak architektura NN jest również nieco widoczna na wynikowych diagramach.

Przykłady:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


21
Wyjaśnij, co widzimy tutaj. Wygląda pięknie, ale nie rozumiem, w jaki sposób fantazyjne obrazy wspierają rozumienie działania sieci.
Martin Thoma,

Nie podoba mi się twoje uwłaczające użycie terminu „fantazyjne obrazy”. @Martin
VividD

9
Nie chciałem cię zaatakować, ale twoja zbyt defensywna odpowiedź bez odpowiedzi na moje pytanie mówi sama za siebie. - Dodałem część „interpretacja” do schematu „klocków lego”.
Martin Thoma

1
Nawiasem mówiąc: drugi link jest martwy.
Martin Thoma

4
@MartinThoma To wyraźnie sztuka danych, a nie dane (vide lisacharlotterost.github.io/2015/12/19/… ).
Piotr Migdal




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.