caffe 中添加新的layer

假设新的layer的名字为new_layer;
1、创建layer头文件new_layer.hpp(一般继承自基础类,如Layer、BasePrefetchingDataLayer等);
2、实现new_layer.cpp文件;
3、实现new_layer.cu文件(根据需要,可不写该文件,即该layer不适用GPU);
4、遇到问题1:实现new_layer.cpp文件时,出现错误
In instantiation of ‘boost::shared_ptr《caffe::Layer《Dtype》》 caffe::Creator_CrowdEvaluateLayer(const caffe::LayerParameter&) [with Dtype = float]’:
../src/caffe/layers/NewLayer.cpp:64:1: required from here
../include/caffe/layer_factory.hpp:135:67: error: invalid new-expression of abstract class type caffe::NewLayer《float》’
return shared_ptr《Layer《Dtype》》(new type##Layer《Dtype》(param));
新添加的layer继承自其它layer(如Layer等)时,必须实现其所有纯虚函数(如Forward_cpu()、Backward_cpu()等函数),出现该错误,可能是在添加新的layer时,没有实现其基类中有关CPU操作纯虚函数;
解决方法:定义基类中的有关CPU操作的所有纯虚函数(Forward_cpu()、Backward_cpu()等),若没有实际应用的函数,可以没有具体实现,此时在函数内部只需写NOT_IMPLEMENTED;

5、遇到问题2: 实现new_layer.cu文件时,出现错误 inherited member is not allowed
原因:同上,必须实现其所有纯虚函数(如Forward_gpu()、Backward_gpu()等函数),添加新的layer时,在使用GPU时,没有实现其基类中有关GPU操作纯虚函数;
解决方法:定义基类中的有关GPU操作的所有纯虚函数(Forward_gpu()、Backward_gpu()等),若没有实际应用的函数,可以没有具体实现,此时在函数内部只需写NOT_IMPLEMENTED;

你可能感兴趣的:(深度学习)