我怎么能知道“偏见”无论是在一层中存在?(How can i know whether “bias”

2019-09-30 17:59发布

我想读的重量和偏见的朱古力网络pycaffe。 这里是我的代码

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 ? 以及如何编写代码?

Answer 1:

您可以通过简单地重复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提振包装对象,因此您可能需要显式转换它列出( list(net.params[layer_name])在一些的方法,我在这个答案建议。



Answer 2:

如果你想这样做卷积层,你可以找到该层是否有偏差,通过阅读prototxt无需为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'


文章来源: How can i know whether “bias” exists in a layer?