mem*_*ecs 2 machine-learning neural-network deep-learning caffe pycaffe
给定一个caffe.Net对象,访问特定层的最佳方法是什么?
现在,我只想出了如何遍历它们,这不是很有用:
for i in range(n_layers):
print net.layers[i].type
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取所有图层的名称
all_names = [n for n in net._layer_names]
Run Code Online (Sandbox Code Playgroud)
当然,如果您要检查学习到的参数的值,则可以看到它在此净手术中是如何完成的示例中。
例如,如果您要检查conv1图层的过滤器(假设您的模型中有一个名称相同的图层),则可以访问
In [1]: net.params['conv1'][0].data.shape
Out[1]: (64, 3, 3, 3)
Run Code Online (Sandbox Code Playgroud)
而这一层的偏差项
In [2]: net.params['conv1'][1].data.shape
Out[2]: (64,)
Run Code Online (Sandbox Code Playgroud)
如您所见,这是图像处理网络的第一层,它具有64个滤镜,作用于3x3 BGR(3通道)输入的色块。
如果您已经通过网络馈送了数据(使用net.forward或net.backward),则可以检查不同层对通过网络馈送的特定输入的响应:
In [3]: net.blobs['conv1'].data.shape
Out[3]: (1, 64, 198, 198)
Run Code Online (Sandbox Code Playgroud)
conv1图层的输出形状是198x198像素,带有64个通道(此图层中有64个滤镜),并且批处理大小为1。
如果还执行了向后传递,则还可以检查在此图层上计算的渐变:
In [4]: net.blobs['conv1'].diff.shape
Out[4]: (1, 64, 198, 198)
Run Code Online (Sandbox Code Playgroud)