2017-09-07 1 views
1

.prototxt에 정의 된 카페 네트워크에서 네트워크 매개 변수를 읽고 싶습니다. layer_dict의 레이어 개체로만 알려줍니다. 그것의 "컨볼 루션 (Convolution)"레이어는 아니지만 .prototxt 파일에 잘 정의 된 kernel_size, strides 등과 같은 것은 아닙니다.파이퍼에서 caffe .prototxt 모델 정의에서 네트워크 매개 변수를 읽는 것

name: "Model" 
layer { 
    name: "data" 
    type: "Input" 
    top: "data" 
    input_param { 
    shape: { 
     dim: 64 
     dim: 1 
     dim: 28 
     dim: 28 
    } 
    } 
} 
layer { 
    name: "conv2d_1" 
    type: "Convolution" 
    bottom: "data" 
    top: "conv2d_1" 
    convolution_param { 
    num_output: 32 
    kernel_size: 3 
    stride: 1 
    weight_filler { 
     type: "gaussian" # initialize the filters from a Gaussian 
     std: 0.01  # distribution with stdev 0.01 (default mean: 0) 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 

layer { 
    name: "dense_1" 
    type: "InnerProduct" 
    bottom: "conv2d_1" 
    top: "out" 
    inner_product_param { 
    num_output: 1024 
    weight_filler { 
     type: "gaussian" 
     std: 0.01 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 

내가 하나가 이렇게 같은 모델을 분석 할 수 있음을 발견했다 :

그래서 나는 model.prototxt과 같이 가지고 말할 수

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() 

을하지만 난 어떻게 필드를 얻는 아무 생각이 없다 결과 객체의 protobuf 메시지에서.

답변

1

당신은 레이어를 통해 반복하고 예컨대 그에 상응하는 PARAM, :에 대해 질문 할 수

for i in range(0, len(net.layer)): 
    if net.layer[i].type == 'Convolution': 
     net.layer[i].convolution_param.bias_term = True # bias term, for example 

적절한 * _param 유형은 예를 들어, caffe.proto에서 찾을 수 있습니다

optional ConvolutionParameter convolution_param = 106 
관련 문제