2017-10-10 58 views
1

我正嘗試用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? 以及如何編寫代碼?

回答

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]是不完全是一個蟒蛇list,而是一些Python提升包裝對象的情況下,所以你可能需要明確地投它列出(list(net.params[layer_name]))中的一些我在此建議的方法回答。

+1

非常感謝您! 它的工作原理! 但實際上,這是'len(net.params [layer_name])> = 2'。 –

0

如果你想這樣做卷積層,你可以找到該層是否有通過閱讀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' 
相關問題