我在caffe中创建了一个"Python""myLayer",并在网络train_val.prototxt中使用它,如下所示插入该层:

layer {
  name: "my_py_layer"
  type: "Python"
  bottom: "in"
  top: "out"
  python_param {
    module: "my_module_name"
    layer: "myLayer"
  }
  include { phase: TRAIN } # THIS IS THE TRICKY PART!
}

现在,我的图层仅参与网络的TRAIN编码阶段,
我怎么知道我图层的setup函数呢?
class myLayer(caffe.Layer):
  def setup(self, bottom, top):
     # I want to know here what is the phase?!!
  ...

PS,
我也在"Caffe Users" google group上发布了这个问题。如果有什么东西出现,我会udpdate。

最佳答案

这是一个很好的解决方法,但是如果您只想将phase作为参数传递,那么现在可以将阶段作为图层的属性来访问。此功能仅在6天前https://github.com/BVLC/caffe/pull/3995合并。

具体的提交:https://github.com/BVLC/caffe/commit/de8ac32a02f3e324b0495f1729bff2446d402c2c

有了这个新功能,您只需要使用self.phase属性即可。例如,您可以执行以下操作:

class PhaseLayer(caffe.Layer):
"""A layer for checking attribute `phase`"""

def setup(self, bottom, top):
    pass

def reshape(self, bootom, top):
    top[0].reshape()

def forward(self, bottom, top):
    top[0].data[()] = self.phase

关于python - Caffe:如何获得Python层的相位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34549743/

10-13 07:51