Global initialization / Template in Caffe(c++)
本文重点分析深度学习平台(Caffe)中注册(register layer)的相关代码layer_factory.hpp
参考
1. LayerRegistry - 功能模板类
好处:
- 添加新类时,总得修改factory::Create()函数,对于大系统很繁杂
- factory需要提前知道所有的类
2. LayerRegisterer - 注册
实际的注册接口
3. INSTANTIATE_CLASS - 模板类实例化
// template的另一个问题:通过实例化,解决实现模板在.cpp与.h的分离
经过实例化,编译器会生成相应type的代码, 否则cpp中并不知道实例化成float或什么
4. SetUP Layer - 使用
例如新添加DispatchLayer层,在dispatch_layer.cpp底部需添加如下宏
其#define经过编译后变成如下代码:
在net.cpp中通过以下代码,将上述类实例化为对象后,就添加到layers_中进行管理
If the layer is going to be created by another creator function, 可以直接调用REGISTER_LAYER_CREATOR
5. Targets.cmake - 编译
参考