我如何知道图层中是否存在“偏见”?

时间:2017-10-10 09:37:33

标签: python neural-network deep-learning caffe pycaffe

我正在尝试用pycaffe在caffe网络中读取重量和偏见。 这是我的代码

weight = net.params[layer_name][0].data
bias = net.params[layer_name][1].data

但是,我网络中的某些图层没有偏差,因此会出现Index out of range的错误。

所以我的问题是我可以使用

if(net.params[layer_name][1] exists):
    bias = net.params[layer_name][1].data

控制bias的作业? 以及如何编写代码?

2 个答案:

答案 0 :(得分:2)

您可以简单地遍历net.params[layer_name]

layer_params = [blob.data for blob in net.params[layer_name]]

这样,您获得所有layer_params(某些图层可能超过2,例如"BatchNorm"

如果您只想检查第二个参数blob,可以使用len

if len(net.params[layer_name]) >= 2:
    bias = net.params[layer_name][1].data

PS,
可能是net.params[layer_name]不完全是python list的情况,而是一些python boost包装器对象,因此您可能需要将其显式地转换为列表(list(net.params[layer_name]))。我在这个答案中建议的方法。

答案 1 :(得分:0)

如果你想为卷积层做这件事,你可以通过读取原型而不需要caffemodel找到该层是否有偏见,即

from caffe.proto import caffe_pb2
import google.protobuf.text_format
net = caffe_pb2.NetParameter()
f = open('model.prototxt', 'r')
net = google.protobuf.text_format.Merge(str(f.read()), net)
f.close()
for i in range(0, len(net.layer)):
    if net.layer[i].type == 'Convolution':
        if net.layer[i].convolution_param.bias_term == True:
            print 'layer has bias'