Python 如何可视化Caffe参数?

Python 如何可视化Caffe参数?,python,numpy,matplotlib,deep-learning,caffe,Python,Numpy,Matplotlib,Deep Learning,Caffe,我发现,在训练网络后,我一直在寻找一种在Caffe中可视化参数的方法。它发送一个参数的转置 filters = net.params['conv1'][0].data vis_square(filters.transpose(0, 2, 3, 1)) 我不明白为什么它会转移数据?在可视方中使用以下代码: data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim +

我发现,在训练网络后,我一直在寻找一种在Caffe中可视化参数的方法。它发送一个参数的转置

filters = net.params['conv1'][0].data
vis_square(filters.transpose(0, 2, 3, 1))
我不明白为什么它会转移数据?在可视方中使用以下代码:

data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
这是太压缩,无法理解,任何解释将不胜感激。然后,当我将代码更改为获取conv2而不是conv1时:

filters = net.params['conv2'][0].data
vis_square(filters.transpose(0, 2, 3, 1))
我明白了

类型错误:图像数据的维度无效

,conv1和conv2之间是否存在导致此错误的任何差异?我们如何更改代码来修复它,并使其适用于所有层

一些调试数据:

net.params['conv1'][0].data.shape : (96, 3, 11, 11)
net.params['conv1'][1].data.shape : (96,)
net.params['conv2'][0].data.shape : (256, 48, 5, 5)
net.params['conv2'][1].data.shape : (256,)
net.params['conv3'][0].data.shape : (384, 256, 3, 3)
net.params['conv3'][1].data.shape : (384,)

for conv2:
data.shape[0] :  256
np.sqrt(data.shape[0]) :  16.0
np.ceil(np.sqrt(data.shape[0])) :  16.0

data.shape[0] :  256
data.shape[0:] :  (256, 6, 6, 48)
data.shape[1] :  6
data.shape[1:] :  (6, 6, 48)
data.ndim :  4
range(4, data.ndim + 1)) :  [4]
tuple(range(4, data.ndim + 1)) :  (4,)
及之后:

data = np.pad(data, padding, mode='constant', constant_values=1)
对于conv2:

data.shape :  (10, 12, 10, 12, 3)
之后

data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
数据如下:

data.shape :  (120, 120, 3)

您检查的代码是为了可视化(即转换为RGB图像)卷积滤波器而编写的。
conv1
过滤器(在您的示例中)的形状是
(96,3,11,11)
,意思是
-
96
:您的网络的
conv1
中有96个过滤器(即
num\u输出:96
),因此您希望查看96个不同的过滤器。
-
3
:每个过滤器的输入维度是3,因为网络中的
conv1
的输入是一个带有三个通道的RGB图像。
-
11,11
:您案例中每个内核/过滤器的空间大小为11x11(即
内核大小:11
)。
因此,将96个过滤器可视化为11x11x3缩略图

但是,当尝试可视化
conv2
(或任何其他更深层次)时,您会遇到问题。RGB不再意味着过滤维度。
conv2
的过滤器作用于
conv1
的输出功能(在您的情况下,它是一个96维的空间)。迄今为止,AFAIK还没有直接的方法将96维数据转换为简单的3D RGB表示。
因此,您不能使用相同的代码来可视化
conv2
过滤器。您必须使用其他方法进行可视化