【问题标题】:How can i know whether "bias" exists in a layer?我怎么知道图层中是否存在“偏差”?
【发布时间】:2018-03-21 15:57:50
【问题描述】:

我正在尝试使用 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? 以及如何编写代码?

【问题讨论】:

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


    【解决方案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 boost 包装对象,因此您可能需要在我建议的一些方法中将其显式转换为列表 (list(net.params[layer_name]))回答。

    【讨论】:

    • 非常感谢!有用!但实际上,那是len(net.params[layer_name]) >= 2
    【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2012-09-21
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多