0

我的目标是实现从代码汇集层prototxt如下:如何在pycaffe中生成客户池图层原型文件?

layer { 
    name: "my_pooling" 
    type: "Pooling_Custom" 
    bottom: "conv1" 
    top: "my_pooling" 
    pooling_custom_param { 
    pool: MAX 
    kernel_size: 2 
    stride: 2 
    engine : CAFFE 
    } 
} 

其中Pooking_Custompooling_custom_param是我修改池。我想用python来生成上面的输出。我使用NetSpec做到这一点:

from caffe import params as P 
n = caffe.NetSpec() 
my_pooling = L.Pooling(conv1, type="Pooling_Custom", pool=P.Pooling.MAX, kernel_size=2, stride=2, engine=1) 

但是,我无法生成pooling_custom_param。我该怎么做?我现在的结果是

layer { 
    name: "my_pooling" 
    type: "Pooling_Custom" 
    bottom: "conv1" 
    top: "my_pooling" 
    pooling_param { 
    pool: MAX 
    kernel_size: 2 
    stride: 2 
    engine : CAFFE 
    } 
} 

回答

0

如果你这样做是为亚型池,你不能:名称由父模板定义的那些属性。所有你可以改变的是值(每个项目的右侧,冒号后面)。

功能的原因是,你正在合并父类的方法,其中这些字段名是硬编码的。例如,将会有一些指向pooling_param [“kernel_size”]。如果您将名称更改为pooling_custom_param,则还需要重新配置该软件......并且这不在该语言的软件实现中。

如果你真的需要更改该属性名称,欢迎克隆整个Pooling类,进行更改,并实例化该新类的图层。

+0

谢谢梅子。其实,我正在使用Caffe的修改版本。在版本中,我使用'pooling_custom_param'来定义池参数。我的caffe版本使用'pooling_custom_param'设置了我的设置。在我的问题中,我关注于使用'caffe.NetSpec()'从python脚本生成原型文件。这是不可能的吗? – user8264

+0

我不知道 - “Caffe的修改版”并不告诉我*它是如何修改的。显然,你有一个可以改变的手工版本。如果** NetSpec **没有被类似的修改,我认为你不能生成你想要的标签;你必须添加功能** NetSpec **来处理这种变化。 – Prune