如何在C ++中初始化卷积层而不是原型文本?

时间:2019-03-05 02:55:22

标签: c++ deep-learning caffe cudnn

我试图将caffe提供的图层类“ CuDNNConvolutionLayer”导入到我自己的项目(纯C ++项目)中。因此,我不能使用prototxt指定图层。相反,我必须在声明它时手动将参数发送到该层。 (我不确定这种方式是否正确,我只是在探索)

我这样做了:

int param={20,5,1,0,1,1,???,???}; caffe::CuDNNConvolutionLayer<float> cv1(*param);

该参数中的最后两个参数设置为初始化“ bias_term”(对或错)和“ engine”(caffe或CUDNN)。正如我提到的那样,我不能忽略这两个值,因为这不是prototxt,因此,如果我想使用CUDNN引擎并且没有偏向项,我应该在这里填充什么值? (我已经将参数声明为int,因此我认为并希望答案应该为0、1-希望如此)

Operating system: ubuntu 18.04
Compiler: gcc
CUDA version (if applicable): 10.0
CUDNN version (if applicable): v7
BLAS:
Python version (if using pycaffe):
MATLAB version (if using matcaffe):

1 个答案:

答案 0 :(得分:0)

CuDNNConvolutionLayer构造函数接受对LayerParameter protobuf对象(不是int *)的引用。因此,您必须使用默认构造函数创建一个空的LayerParameter对象,并使用其setter方法向其添加必要的字段。据我所知,ProtoBuf不支持{}样式的初始化。

初始化LayerParameter的另一种方法是通过使用ProtoText表示形式解析字符串文字。

阅读"ProtoBuf C++ generated code"的文档会有所帮助。

另外,请查看source of Scale layer,以获取创建FillerParameter和LayerParameter来构建图层的示例。