В этом посте нам нужно показать, как написать приложение caffe2 на C ++. В высокопроизводительных приложениях, таких как торговля, научные вычисления, производительность является критическим вопросом. Вот почему нам нужно вычислить весь граф, используя c ++.

В последние годы все больше и больше алгоритмов ИИ внедряется во встроенные системные устройства, такие как мобильный телефон. В этих устройствах вычислительные ресурсы ограничены, поэтому управление ресурсами должно осуществляться эффективно.

Требования:

Caffe2 должен быть установлен. Затем будет связан Caffe2.so.

В этом уроке мы начнем с написания Makefile, потому что он определит структуру всего проекта.

eigen3_include = /usr/local/include/caffe2/
caffe2_lib = /usr/local/lib/

Эти два пути зависели от платформы, на которой вы работаете. После установки caffe2, следуя инструкциям, он будет установлен в системную библиотеку. Это не установило бы два пути

CAFFE2_LINKFLAGS = “-L$(CAFFE2_LIB) -lglog -lgflags -lprotobuf”

Caffe2 построен с помощью protobuf, gflags и glob lib, необходимо построить цель с помощью этих библиотек.

Caffe2 построен с использованием библиотеки шаблонов Eigen3, поэтому мы должны добавить его в путь включения.

CXXFLAGS = -std=c++11 -I${eigen3_include}

После завершения создания файла makefile мы должны приступить к написанию программы. Мы стремимся написать небольшую программу для работы в сети CNN. Он продемонстрирует, как сделать распознавание чисел.

В этом фрагменте кода мы попытаемся продемонстрировать базовую функциональность рабочей области и большого двоичного объекта. Мы создаем рабочую область, которая похожа на сеанс в тензорном потоке, и создаем blob для представления переменной в графе вычислений caffe2.

Рабочее пространство Рабочее пространство;

std::vector<float> x(4 * 3 * 2);
auto tensor = workspace.CreateBlob(“my_x_variable”)->GetMutable<TensorCPU>();

В этом абзаце кода он создает большой двоичный объект, и мы делаем его типом TensorCPU. Возможно, это будет тип TensorGPU, когда графический процессор на устройстве работает.

const auto blob = workspace.GetBlob(“my_x”)
auto tensor = blob->GEt<Tensor<CPUContext>>();
const auto& data = tensor.template data<float>();

В приведенном выше коде мы получаем переменную x из blob. Затем мы конвертируем весь объект blob в тензорный объект. Наконец, мы получаем выражение данных с помощью функции шаблона.

g++ data/make_mnist_db.cc -std=c++11 -I/usr/local/include/eigen3 -L /usr/local/lib/ -lCaffe2_CPU -lprotobuf -lglog -lgflags -o gy

Наконец, он распечатывает все значения переменной x.

исходный код: https://github.com/Knight-X/basic_caffe2_cc