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形状。