I created a \"Python\" layer \"myLayer\" in caffe, and use it in the net train_val.prototxt I insert the layer like this:
As pointed out by galloguille, caffe is now exposing phase to the python layer class. This new feature makes this answer a bit redundant. Still it is useful to know about the param_str in caffe python layer for passing other parameters to the layer.
AFAIK there is no trivial way of getting the phase. However, one can pass arbitrary parameters from the net prototxt to python. This can be done using the param_str parameters of the python_param.
Here's how it's done:
layer {
type: "Python"
...
python_param {
...
param_str: '{"phase":"TRAIN","numeric_arg":5}' # passing params as a STRING
In python, you get param_str in the layer's setup function:
import caffe, json
class myLayer(caffe.Layer):
def setup(self, bottom, top):
param = json.loads( self.param_str ) # use JSON to convert string to dict
self.phase = param['phase']
self.other_param = int( param['numeric_arg'] ) # I might want to use this as well...