Как вы визуализируете архитектуры нейронных сетей?

80

При написании статьи / создании презентации по теме, касающейся нейронных сетей, обычно визуализируют архитектуру сетей.

Каковы хорошие / простые способы автоматической визуализации общих архитектур?

Мартин Тома
источник
1
Только что нашел reddit.com/r/MachineLearning/comments/4sgsn9/…
Мартин Тома
1
Я написал Простые диаграммы извилистых нейронных сетей с обзором методов визуализации глубокого обучения (как ручного, так и автоматического). Я получил много вдохновения и ссылок из этой темы - спасибо!
Петр Мигдаль

Ответы:

25

Tensorflow, Keras, MXNet, PyTorch

Если нейронная сеть представлена ​​в виде графика Tensorflow, вы можете визуализировать этот график с помощью TensorBoard .

Вот как выглядит MNIST CNN:

введите описание изображения здесь

Вы можете добавить имена / области (например, «dropout», «softmax», «fc1», «conv1», «conv2») самостоятельно.

интерпретация

Следующее только о левом графике. Я игнорирую 4 маленьких графика в правой половине.

Каждый блок представляет собой слой с параметрами, которые могут быть изучены. Для вывода информация течет снизу вверх. Эллипсы - это слои, которые не содержат изученных параметров.

Цвет коробок не имеет смысла.

Я не уверен в значении пунктирных маленьких квадратиков («градиенты», «Адам», «сохранить»).

Мартин Тома
источник
это хорошо, я пытаюсь избежать названия типа conv1, conv2 и т. д., я хочу сделать все имя conv позже как CONV, как я буду это делать ??
Судип Дас,
+1. Хотя это не только для TF: MXNet и Pytorch также имеют некоторую поддержку
Jakub Bartczuk
@SudipDas Вы можете добавить имена в коде к слоям, которые будут отображаться при построении графика.
Бен
Как я буду отображать имя каждого слоя как «CONV», если я напишу его как «CONV» каждого слоя, тогда я получу ошибку, потому что каждый слой должен иметь уникальное имя в качестве правил tf, НО я хочу знать, это Есть ли другой способ преодолеть эту проблему? @Ben
Судип Дас
1
@onof Я исправил ссылку
Мартин Тома
23

Недавно я создал инструмент для рисования NN-архитектур и экспорта SVG, который называется NN-SVG.

введите описание изображения здесь

Алекс Ленаил
источник
1
Загрузка SVG не работает
изображение
работает на меня 23.01.199. Если проблема не устранена, откройте ее.
Алекс Ленаил
1
это единственный правильный ответ
ArtificiallyIntelligence
потрясающий инструмент. Однако я заметил, что в стиле AlexNet размеры тензоров были ошибочно представлены (размеры по ширине и высоте)
FlySoFast
11

Я бы добавил визуализацию ASCII, используя keras-sequential-ascii (заявление об отказе: я автор).

Небольшая сеть для CIFAR-10 (из этого руководства ) будет:

       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

Для VGG16 это будет:

       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

Существует проект с открытым исходным кодом под названием Netron

Netron - средство просмотра моделей нейронных сетей, глубокого обучения и машинного обучения.

Netron поддерживает ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) и TensorFlow Lite (.tflite). Netron имеет экспериментальную поддержку для Caffe (.caffemodel), Caffe2 (Forex_Net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) и TensorFlow (.pb, .meta).

введите описание изображения здесь

han4wluc
источник
8

Keras

Модуль keras.utils.vis_utils предоставляет служебные функции для построения модели Keras (используя graphviz).

Ниже показана модель сети, в которой первый скрытый слой имеет 50 нейронов и ожидает 104 входных переменных.

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

введите описание изображения здесь

mingxue
источник
Могу ли я использовать его в формате, совместимом с LaTex?
pushpen.paul
8

Пакет Python conxможет визуализировать сети с активациями с помощью функции net.picture()для создания изображений SVG, PNG или PIL, например:

введите описание изображения здесь

Conx построен на Keras, и может читать в моделях Keras. Цветовая карта в каждом банке может быть изменена, и она может отображать все типы банков.

Дополнительную информацию можно найти по адресу: http://conx.readthedocs.io/en/latest/

Даг Бланк
источник
6

Я работал над визуализатором нейронной сети с помощью перетаскивания (и не только). Вот пример визуализации для LeNet-подобной архитектуры. Визуализация LeNet-подобной архитектуры Модели с разветвлением и разветвлением также довольно легко моделируются. Вы можете посетить веб-сайт по адресу https://math.mit.edu/ennui/

Джесси
источник
мой браузер продолжает
падать,
1
Спасибо за проверку его. Да, эта ошибка появилась недавно и, по-видимому, является результатом некоторых недавних изменений в WebGL в Chrome. Все должно работать на Firefox. Я обновлю тебя, когда узнаю больше.
Джесси
TKS, ваш визуализатор потрясающий, выглядит больше, чем детская площадка :)
datdinhquoc
1
Спасибо! Дайте мне знать, если у вас есть проблемы или идеи. У нас есть такие забавные вещи, как генерация кода!
Джесси
5

В R nnetне поставляется с функцией plot, но код для этого приведен здесь .

В качестве альтернативы вы можете использовать более свежий и IMHO лучший пакет, neuralnetкоторый называется plot.neuralnetфункцией, поэтому вы можете просто сделать:

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

neuralnet

neuralnetне используется столько, сколько nnetпотому, что nnetон намного старше и поставляется с R-Cran. Но neuralnetимеет больше алгоритмов обучения, включая упругое обратное распространение, которое отсутствует даже в таких пакетах, как Tensorflow, и намного более устойчиво к выбору гиперпараметров, и имеет больше возможностей в целом.

Рикардо Круз
источник
Вы должны добавить обновленную ссылку для кода NNet в R beckmw.wordpress.com/2013/11/14/…
wacax
4

Есть несколько новых альтернативных способов визуализации нейронных сетей.

Пожалуйста, смотрите эти статьи:

Потрясающие «сканирования мозга ИИ» показывают, что машины видят, когда они изучают новые навыки

Внутри «мозга» ИИ - как выглядит машинное обучение?

Эти подходы больше ориентированы на визуализацию работы нейронной сети, однако архитектура NN также несколько видна на полученных диаграммах.

Примеры:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

VividD
источник
21
Пожалуйста, объясните, что мы видим здесь. Это выглядит красиво, но я не понимаю, как причудливые изображения поддерживают понимание работы сети.
Мартин Тома
Мне не нравится ваше уничижительное использование термина "необычные изображения". @Martin
VividD
9
Я не хотел нападать на вас, но ваш чрезмерно оборонительный ответ, фактически не отвечая на мой вопрос, говорит сам за себя. - Я добавил часть «интерпретация» к диаграмме «лего-боксы».
Мартин Тома
1
Кстати: вторая ссылка мертва.
Мартин Тома
4
@MartinThoma Это, безусловно, искусство данных, а не данные (смотри lisacharlotterost.github.io/2015/12/19/… ).
Петр Мигдаль
3

Не очень хорошо для бумаг, но очень полезно для того, чтобы показать людям, которые мало знают о нейронных сетях, как может выглядеть их топология. Эта библиотека Javascript (Neataptic) позволяет визуализировать вашу сеть:

введите описание изображения здесь

Томас В.
источник
3

Вы можете прочитать популярную статью « Понимание нейронных сетей с помощью глубокой визуализации», в которой обсуждается визуализация сверточных сетей. Его реализация не только отображает каждый слой, но также отображает активации, веса, деконволюции и многое другое, что подробно обсуждается в статье. Это код в caffe'. Самое интересное, что вы можете заменить предварительно обученную модель своей собственной.

СМИ
источник
2

Tensorspace-JS - это фантастический инструмент для 3d визуализации сетевой архитектуры:

введите описание изображения здесь

https://tensorspace.org/

и вот хороший пост о том, как написать программу:

https://medium.freecodecamp.org/tensorspace-js-a-way-to-3d-visualize-neural-networks-in-browsers-2c0afd7648a8

Али Мирзаи
источник
Не могли бы вы предоставить ссылку на этот инструмент?
Петр Мигдаль
1
@PiotrMigdal Я обновил ответ.
Али Мирзаи
1

Netscope - мой повседневный инструмент для моделей Caffe.

введите описание изображения здесь

Дмитрий Прилипко
источник