Machine learning 如何在Caffe中检索图层

Machine learning 如何在Caffe中检索图层,machine-learning,neural-network,deep-learning,caffe,pycaffe,Machine Learning,Neural Network,Deep Learning,Caffe,Pycaffe,给定一个caffe.Net对象,访问特定层的最佳方式是什么? 现在我只知道如何迭代它们,这不是很有用: for i in range(n_layers): print net.layers[i].type 您可以通过以下方式获取所有图层的名称: all_names = [n for n in net._layer_names] 当然,如果您想检查已学习参数的值,您可以在本例中看到它是如何完成的 例如,如果您想检查conv1层的过滤器(假设您的模型中有一个具有该名称的层),您可以访问 In

给定一个
caffe.Net
对象,访问特定层的最佳方式是什么?
现在我只知道如何迭代它们,这不是很有用:

for i in range(n_layers):
  print net.layers[i].type

您可以通过以下方式获取所有图层的名称:

all_names = [n for n in net._layer_names]
当然,如果您想检查已学习参数的值,您可以在本例中看到它是如何完成的

例如,如果您想检查
conv1
层的过滤器(假设您的模型中有一个具有该名称的层),您可以访问

In [1]: net.params['conv1'][0].data.shape
Out[1]: (64, 3, 3, 3)
这一层的偏置项

In [2]: net.params['conv1'][1].data.shape
Out[2]: (64,)
如您所见,这是图像处理网络的第一层,它有64个过滤器,作用于3x3块BGR(3个通道)输入

如果您已经通过网络输入数据(使用
net.forward
net.backward
),您可以检查不同层对通过网络输入的特定输入的响应:

In [3]: net.blobs['conv1'].data.shape
Out[3]: (1, 64, 198, 198)
conv1
层的输出形状为198x198像素,有64个通道(该层中有64个过滤器),批量大小为1。
如果您也执行了向后传递,还可以检查在该层计算的梯度:

In [4]: net.blobs['conv1'].diff.shape
Out[4]: (1, 64, 198, 198)

用例:

我需要在batchnorm层中设置运行平均值和var,该层不在
net.params
net.blobs

解决方案:

net.layer\u dict['bn\u layer\u name'].blobs[0]。数据
正在运行
blobs[1]
是变量。
blobs[2]
设置为1,是默认为0的刻度。

我如何找到它:


打印(net.\uuuu dir\uuuuu())
然后猜测并尝试。

通过“访问特定层”,您到底想实现什么?调试。我只想检查层的一些成员变量。在这种情况下,请查看我的更新答案。感谢您的努力,但我清楚地问了如何获得层对象而不是BLOB。例如,我想访问一些未暴露给blob的内部数据。@memecs什么内部数据?图层的参数?你得说得更具体些。请相应地更新你的问题,你会变得更好吗answers@Shai我有一个使用扁平层的模型。此层位于
net.\u layer\u name
中,但在net.params中找不到它。如何访问扁平层的形状?@Anton“flatte”层是一个“无参数”层,因此它没有
net.params
。另一方面,您可以通过
net.blobs
检查其输入和输出blob形状。