如何在 C++ 中初始化卷积层而不是 prototxt?

How to initilize convolution layer in C++ instead of prototext?

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

我这样做了:

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

param中的最后两个参数设置为初始化"bias_term"(true或false)和"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):

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

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

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

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