Podczas pisania pracy / prezentacji na temat sieci neuronowych zwykle wizualizuje się architekturę sieci.
Jakie są dobre / proste sposoby automatycznej wizualizacji popularnych architektur?
Podczas pisania pracy / prezentacji na temat sieci neuronowych zwykle wizualizuje się architekturę sieci.
Jakie są dobre / proste sposoby automatycznej wizualizacji popularnych architektur?
Odpowiedzi:
Jeśli sieć neuronowa jest podana jako wykres Tensorflow, możesz zwizualizować ten wykres za pomocą TensorBoard .
Oto jak wygląda MNIST CNN:
Możesz dodawać nazwy / zakresy (takie jak „dropout”, „softmax”, „fc1”, „conv1”, „conv2”).
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”).
Niedawno stworzyłem narzędzie do rysowania architektur NN i eksportowania SVG, o nazwie NN-SVG
W Caffe możesz użyć caffe / draw.py do narysowania protobuffera NetParameter:
W Matlabie możesz używać widoku (netto)
Keras.js :
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
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).
Oto jeszcze jeden sposób - dotnets , wykorzystujące Graphviz , mocno zainspirowane tym postem Thiago G. Martinsa.
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)
Pakiet Python conx
może wizualizować sieci z aktywacjami z funkcją net.picture()
tworzenia obrazów SVG, PNG lub PIL, takich jak:
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/
Pracowałem nad wizualizatorem sieci neuronowej typu przeciągnij i upuść (i nie tylko). Oto przykład wizualizacji 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/
W języku R nnet
nie ma funkcji drukowania, ale kod do tego jest podany tutaj .
Alternatywnie możesz użyć nowszego i lepszego pakietu IMHO o nazwie, neuralnet
który zawiera plot.neuralnet
funkcję, dzięki czemu możesz po prostu:
data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))
neuralnet
nie jest używany tak często, nnet
ponieważ nnet
jest znacznie starszy i jest dostarczany z r-cran. Ale neuralnet
ma 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.
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:
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:
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.
Tensorspace-JS to fantastyczne narzędzie do wizualizacji architektury sieci w 3D:
a tutaj jest miły post o tym, jak napisać program:
Netscope to moje codzienne narzędzie do modeli Caffe.