【问题标题】:How to initilize convolution layer in C++ instead of prototext?如何在 C++ 而不是 prototxt 中初始化卷积层?
【发布时间】:2019-03-05 02:55:22
【问题描述】:

我正在尝试将caffe提供的图层类“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):

【问题讨论】:

    标签: c++ deep-learning caffe cudnn


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗨,Alexey,非常感谢您的回答。我现在明白它是如何工作的。但它太复杂了,所以我打算自己构建每一层。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 2018-01-26
    • 2017-11-23
    • 2021-06-09
    • 2019-05-28
    • 1970-01-01
    • 2021-03-23
    • 2012-08-25
    相关资源
    最近更新 更多