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?

Martin Thoma
źródło
1
Właśnie znalazłem reddit.com/r/MachineLearning/comments/4sgsn9/…
Martin Thoma
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”).

Martin Thoma
źródło
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

Alex Lenail
źródło
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
Piotr Migdal
źródło
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

han4wluc
źródło
10

Oto jeszcze jeden sposób - dotnets , wykorzystujące Graphviz , mocno zainspirowane tym postem Thiago G. Martinsa.

przykład dotnets

bytesinflight
źródło
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

mingxue
źródło
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/

Doug Blank
źródło
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/

Jesse
źródło
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.

Ricardo Cruz
źródło
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

VividD
źródło
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
3

Nie perfekcyjnie dla artykułów, ale bardzo przydatne do pokazania ludziom, którzy nie wiedzą dużo o sieciach neuronowych, jak może wyglądać ich topologia. Ta biblioteka JavaScript (Neataptic) umożliwia wizualizację sieci:

wprowadź opis zdjęcia tutaj

Thomas W.
źródło
3

Możesz przeczytać popularny artykuł Zrozumienie sieci neuronowych poprzez głęboką wizualizację, który omawia wizualizację sieci splotowych. Jego implementacja nie tylko wyświetla każdą warstwę, ale także przedstawia aktywacje, ciężary, dekonwolucje i wiele innych rzeczy, które są szczegółowo omówione w artykule. Kod jest włączony caffe'. Interesujące jest to, że możesz zastąpić wstępnie wyszkolony model własnym.

Głoska bezdźwięczna
źródło