Keras CNN中深层过滤器的可视化

Keras CNN中深层过滤器的可视化,keras,deep-learning,conv-neural-network,Keras,Deep Learning,Conv Neural Network,我的问题很简单。我想在深层可视化ConvNet中使用的过滤器,以提取预测最终模型的特征。通过可视化,我的意思是将其保存为.png格式,就像最后一层中显示的过滤器一样,我们实际上可以在最后一层过滤器中看到一辆汽车 通过我自己的问题提供的帮助,我可以可视化第一个卷积层的过滤器,但这只显示了第一层的可视化。第一层过滤器看起来像一些随机着色的3x3像素图像。但是我想看到最后一层过滤器,就像第一个链接中的汽车过滤器一样 第一层过滤器看起来像一些随机着色的3x3像素图像。但是我想看到最后一层过滤器,就像第一

我的问题很简单。我想在深层可视化ConvNet中使用的过滤器,以提取预测最终模型的特征。通过可视化,我的意思是将其保存为.png格式,就像最后一层中显示的过滤器一样,我们实际上可以在最后一层过滤器中看到一辆汽车

通过我自己的问题提供的帮助,我可以可视化第一个卷积层的过滤器,但这只显示了第一层的可视化。第一层过滤器看起来像一些随机着色的3x3像素图像。但是我想看到最后一层过滤器,就像第一个链接中的汽车过滤器一样

第一层过滤器看起来像一些随机着色的3x3像素图像。但是我想看到最后一层过滤器,就像第一个链接中的汽车过滤器一样。
即使是汽车滤清器的物品也只有第一层的代码

您可以通过以下方式处理不同层的重量:

w=model.layers[i]。获取_权重()[0][:,:,:,:]
其中
i
是层的编号

对于链接中的图片,我不确定它是否是实际的权重,或者可能是显示的激活图。你可以通过以下方式获得:

从keras导入后端为K
get_output=K.function([model.layers[0].input],[cnn.layers[i].output])
输出正常=获取输出([X])[0][m]
其中,
m
是作为输入的
X
中某个图像的编号。

Python库是可视化CNN的一个很好的工具。它可以生成conv过滤器可视化、密集层可视化和注意力地图。最新版本非常旧(而且有点错误),因此我建议从
master
安装:

pip安装git+https://github.com/raghakot/keras-vis.git

a=model.layers[0]。get_weights()[0]
给出了
a
大小
(3,3,3,32)
,因此我认为您的第一个代码应该是
w=model.layers[I]。get_weights()[0][:,:,:,0]
。通过这种方式,我可以保存32个过滤器的图像,因为第一层有32个过滤器。但是代码对第二层不起作用。
a=model.layers[2]。get_weights()[0]
给出了
a的大小
(3,3,32,16)
。我的第二个conv层有16个过滤器。是的,你说得对。指标为:1。粒宽2。粒高3。频道数,4个。过滤器的数量。您可以通过以下方式寻址第二层中第一个过滤器的所有通道:
w=model.layers[1]。获取_weights()[0][:,:,:,0]
是的,如果在第一层中应用32个过滤器,您将在第二层中获得32个activationmaps/通道。你可以将它们分别绘制成一张单独的灰度图片,但当然不能绘制成一张RGB图片。是的,将它们绘制成灰度可以解决这个问题。谢谢嘿,这个库似乎解决了我的问题,但文档链接似乎被注意力地图、convnet过滤器可视化和稠密层打破了visualisations@Yusuf您可以查看,在那里可以找到
mnist
vggnet
的激活最大化示例。另外,请看一下。我知道这听起来很奇怪,但是中的26号单元格中的各种数字的图像说明了网络。它只是输入图像的模糊图像。与我问题中的第一个链接不同,在最后一层过滤器中清楚地显示了汽车。如果我有一些误解,请澄清。@Yusuf,如“激活最大化背后的想法是生成一个输入图像,最大化过滤器输出激活。”这是一种有效的可视化方法。这与简单地绘制权重不同。假设我有一个3x3的过滤器和28x28的图像。这些滤镜看起来不可理解,只是9像素的随机颜色。如果我用输入图像卷积该过滤器,并且图像上使用过滤器高度激活的区域意味着该过滤器代表图像的该部分/模式/部分。这就是热图的基本功能。