Как инициализировать слой свертки в C ++ вместо прототекста? - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь импортировать класс слоя "CuDNNConvolutionLayer", предоставленный caffe, в мой собственный проект (проекты на чистом C ++).Поэтому я не могу использовать prototxt, чтобы указать слой.Вместо этого я должен отправить параметры слою вручную, когда я его объявляю.(Я не уверен, что этот способ правильный, я просто изучаю)

Я сделал это:

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

Последние два параметра в параметре установлены для инициализации "bias_term" (trueили ложь) и "двигатель" (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 голосов
/ 15 марта 2019

Конструктор CuDNNConvolutionLayer принимает ссылку на объект protobuf LayerParameter (не int *).Таким образом, вы должны создать пустой объект LayerParameter с конструктором по умолчанию и добавить необходимые поля к нему с помощью его методов установки.Насколько я знаю, инициализация {} -стиля не поддерживается ProtoBuf. * ​​1001 *

Еще один способ инициализации LayerParameter - анализ строкового литерала с его представлением ProtoText.

Чтение документации «Сгенерированный код ProtoBuf C ++» поможет.

Также проверьте источник слоя Scale для примера создания FillerParameter и LayerParameter для построения слоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...