При написании статьи / создании презентации по теме, касающейся нейронных сетей, обычно визуализируют архитектуру сетей.
Каковы хорошие / простые способы автоматической визуализации общих архитектур?
При написании статьи / создании презентации по теме, касающейся нейронных сетей, обычно визуализируют архитектуру сетей.
Каковы хорошие / простые способы автоматической визуализации общих архитектур?
Ответы:
Если нейронная сеть представлена в виде графика Tensorflow, вы можете визуализировать этот график с помощью TensorBoard .
Вот как выглядит MNIST CNN:
Вы можете добавить имена / области (например, «dropout», «softmax», «fc1», «conv1», «conv2») самостоятельно.
Следующее только о левом графике. Я игнорирую 4 маленьких графика в правой половине.
Каждый блок представляет собой слой с параметрами, которые могут быть изучены. Для вывода информация течет снизу вверх. Эллипсы - это слои, которые не содержат изученных параметров.
Цвет коробок не имеет смысла.
Я не уверен в значении пунктирных маленьких квадратиков («градиенты», «Адам», «сохранить»).
Недавно я создал инструмент для рисования NN-архитектур и экспорта SVG, который называется NN-SVG.
В Caffe вы можете использовать caffe / draw.py для рисования протобуфера NetParameter:
В Matlab вы можете использовать вид (нетто)
Keras.js :
Я бы добавил визуализацию 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
Существует проект с открытым исходным кодом под названием 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).
Вот еще один способ - дотнет , используя Graphviz , вдохновленный этим постом Тьяго Г. Мартинса.
Keras
Модуль keras.utils.vis_utils предоставляет служебные функции для построения модели Keras (используя graphviz).
Ниже показана модель сети, в которой первый скрытый слой имеет 50 нейронов и ожидает 104 входных переменных.
plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)
Пакет Python conx
может визуализировать сети с активациями с помощью функции net.picture()
для создания изображений SVG, PNG или PIL, например:
Conx построен на Keras, и может читать в моделях Keras. Цветовая карта в каждом банке может быть изменена, и она может отображать все типы банков.
Дополнительную информацию можно найти по адресу: http://conx.readthedocs.io/en/latest/
Я работал над визуализатором нейронной сети с помощью перетаскивания (и не только). Вот пример визуализации для LeNet-подобной архитектуры. Модели с разветвлением и разветвлением также довольно легко моделируются. Вы можете посетить веб-сайт по адресу https://math.mit.edu/ennui/
В R nnet
не поставляется с функцией plot, но код для этого приведен здесь .
В качестве альтернативы вы можете использовать более свежий и IMHO лучший пакет, neuralnet
который называется plot.neuralnet
функцией, поэтому вы можете просто сделать:
data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))
neuralnet
не используется столько, сколько nnet
потому, что nnet
он намного старше и поставляется с R-Cran. Но neuralnet
имеет больше алгоритмов обучения, включая упругое обратное распространение, которое отсутствует даже в таких пакетах, как Tensorflow, и намного более устойчиво к выбору гиперпараметров, и имеет больше возможностей в целом.
Есть несколько новых альтернативных способов визуализации нейронных сетей.
Пожалуйста, смотрите эти статьи:
Потрясающие «сканирования мозга ИИ» показывают, что машины видят, когда они изучают новые навыки
Внутри «мозга» ИИ - как выглядит машинное обучение?
Эти подходы больше ориентированы на визуализацию работы нейронной сети, однако архитектура NN также несколько видна на полученных диаграммах.
Примеры:
Не очень хорошо для бумаг, но очень полезно для того, чтобы показать людям, которые мало знают о нейронных сетях, как может выглядеть их топология. Эта библиотека Javascript (Neataptic) позволяет визуализировать вашу сеть:
Вы можете прочитать популярную статью « Понимание нейронных сетей с помощью глубокой визуализации», в которой обсуждается визуализация сверточных сетей. Его реализация не только отображает каждый слой, но также отображает активации, веса, деконволюции и многое другое, что подробно обсуждается в статье. Это код в caffe'
. Самое интересное, что вы можете заменить предварительно обученную модель своей собственной.
Tensorspace-JS - это фантастический инструмент для 3d визуализации сетевой архитектуры:
и вот хороший пост о том, как написать программу:
Netscope - мой повседневный инструмент для моделей Caffe.