当写论文/做一个关于神经网络的话题的演讲时,通常会形象化网络体系结构。
有什么好的/简单的方法可以自动可视化常见的体系结构?
当写论文/做一个关于神经网络的话题的演讲时,通常会形象化网络体系结构。
有什么好的/简单的方法可以自动可视化常见的体系结构?
Answers:
如果将神经网络作为Tensorflow图给出,则可以使用TensorBoard可视化该图。
MNIST CNN如下所示:
您可以自己添加名称/范围(例如“ dropout”,“ softmax”,“ fc1”,“ conv1”,“ conv2”)。
以下仅关于左图。我忽略了右半部分的4个小图。
每个框都是一个带有可学习参数的层。为了进行推断,信息从下往上流动。椭圆是不包含学习参数的图层。
盒子的颜色没有意义。
我不确定虚线框的值(“渐变”,“亚当”,“保存”)。
我最近创建了一个用于绘制NN体系结构和导出SVG的工具,称为NN-SVG
我将使用keras-sequential-ascii添加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
凯拉斯
所述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函数,但是此处提供了相应的代码。
另外,您可以使用neuralnet
具有plot.neuralnet
功能的,称为IMHO的较新的更好的程序包,因此您可以执行以下操作:
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模型的日常工具。