Ops,Helper Funtions 以及 Brew是 caffe2中用来表示神经网络 layer的三个重要概念。下面我们对三者进行介绍。
1. Ops
Ops是operators的缩写,代表Op的集合。FC Op 是全连接层 (与上一层所有神经元链接,与下一层所有神经元链接)Op,可以通过下面的方式创建FC Op:
model.net.FC([blob_in, weights, bias], blob_out)
或者使用下面的方式进行layer复制:
model.net.Copy(blob_in, blob_out)
2.Helper Function
使用Op来新建layer还是挺麻烦的,因为我们需要手动初始化此layer的w以及b。
model = model_helper.ModelHelper(name="train") # initialize your weight weight = model.param_init_net.XavierFill( [], blob_out + '_w', shape=[dim_out, dim_in], **kwargs, # maybe indicating weight should be on GPU here ) # initialize your bias bias = model.param_init_net.ConstantFill( [], blob_out + '_b', shape=[dim_out, ], **kwargs, ) # finally building FC model.net.FC([blob_in, weights, bias], blob_out, **kwargs)
Helper Function可以帮助我们解决w,b初始化,layer定义等问题,所以我们可以使用helper function来创建layer。
fcLayer = fc(model, blob_in, blob_out, **kwargs)
3. brew
brew是Helper Fucntion的集合,对于创建layer来说比Helper Function更简单。对于创建FC layer 来说我们可以通过一句brew命令:
brew.fc(model, blob_in, blob_out, ...)
看起来好像和Helper Function差不多,但是对于更加复杂的模型来说brew更加简单。
4. 自定义Helper Function
我们可以通过下面的方式自定义HF。
def my_super_layer(model, blob_in, blob_out, **kwargs): """ 100x faster, awesome code that you'll share one day. """ brew.Register(my_super_layer) brew.my_super_layer(model, blob_in, blob_out)