Вопрос:

Как создать и использовать API Google TensorFlow C ++

c++ tensorflow

88361 просмотра

10 ответа

1085 Репутация автора

Я действительно хочу начать использовать новую библиотеку Google Tensorflow на C ++. Веб-сайт и документы просто непонятны с точки зрения того, как создать C ++ API проекта, и я не знаю, с чего начать.

Может ли кто-то с большим опытом помочь найти и поделиться руководством по использованию C ++ API tenorflow?

Автор: theideasmith Источник Размещён: 10.11.2015 12:18

Ответы (10)


45 плюса

97855 Репутация автора

Решение

Для начала вам необходимо скачать исходный код с Github, следуя приведенным здесь инструкциям (вам понадобится Bazel и последняя версия GCC).

C ++ API (и серверная часть системы) находится в tensorflow/core. На данный момент поддерживается только интерфейс сеанса C ++ и API C. Вы можете использовать любой из них для выполнения графиков TensorFlow, которые были построены с использованием API-интерфейса Python и сериализованы в GraphDefбуфер протокола. Существует также экспериментальная функция для построения графиков в C ++, но в настоящее время она не так полнофункциональна, как Python API (например, в настоящее время нет поддержки автоматического дифференцирования). Вы можете увидеть пример программы, которая строит небольшой граф на C ++ здесь .

Вторая часть API C ++ - это API для добавления нового OpKernel, то есть класса, содержащего реализации числовых ядер для CPU и GPU. Существует множество примеров того, как их встроить tensorflow/core/kernels, а также учебник по добавлению новой операции в C ++ .

Автор: mrry Размещён: 10.11.2015 03:41

23 плюса

448 Репутация автора

Чтобы добавить к сообщению @ mrry, я собрал учебник, в котором объясняется, как загрузить граф TensorFlow с помощью API C ++. Это очень минимально и должно помочь вам понять, как все части сочетаются друг с другом. Вот мясо этого:

Требования:

  • Базель установлен
  • Клон TensorFlow репо

Структура папки:

  • tensorflow/tensorflow/|project name|/
  • tensorflow/tensorflow/|project name|/|project name|.cc (e.g. https://gist.github.com/jimfleming/4202e529042c401b17b7)
  • tensorflow/tensorflow/|project name|/BUILD

BUILD:

cc_binary(
    name = "<project name>",
    srcs = ["<project name>.cc"],
    deps = [
        "//tensorflow/core:tensorflow",
    ]
)

Два предостережения, для которых есть, вероятно, обходные пути:

  • Прямо сейчас, создание вещей должно происходить в репозитории TensorFlow.
  • Скомпилированный двоичный файл огромен (103 МБ).

https://medium.com/@jimfleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f

Автор: Jim Размещён: 20.11.2015 06:20

8 плюса

1471 Репутация автора

Вы можете использовать этот ShellScript для установки (большей части) его зависимостей, клонирования, сборки, компиляции и получения всех необходимых файлов в ../src/includesпапку:

https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh

Автор: Ivan Seidel Размещён: 26.11.2015 05:31

14 плюса

214 Репутация автора

Если вы хотите избежать как создания своих проектов с помощью Bazel, так и генерации большого двоичного файла, я собрал репозиторий, инструктирующий об использовании библиотеки TensorFlow C ++ с CMake. Вы можете найти это здесь . Общие идеи заключаются в следующем:

  • Клонируйте репозиторий TensorFlow.
  • Добавьте правило сборки tensorflow/BUILD(предоставленные не включают в себя все функциональные возможности C ++).
  • Создайте общую библиотеку TensorFlow.
  • Установите определенные версии Eigen и Protobuf или добавьте их в качестве внешних зависимостей.
  • Сконфигурируйте ваш проект CMake для использования библиотеки TensorFlow.
Автор: cjweeks Размещён: 04.08.2016 04:15

4 плюса

1411 Репутация автора

Я использую хак / обходной путь, чтобы избежать необходимости собирать всю библиотеку TF самостоятельно (что экономит время (настраивается за 3 минуты), дисковое пространство, установку зависимостей dev и размер получаемого двоичного файла). Это официально не поддерживается, но работает хорошо, если вы просто хотите быстро подключиться.

Установите TF через пипс ( pip install tensorflowили pip install tensorflow-gpu). Затем найдите его библиотеку _pywrap_tensorflow.so(TF 0. * - 1.0) или _pywrap_tensorflow_internal.so(TF 1.1+). В моем случае (Ubuntu) он находится по адресу /usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so. Затем создайте символическую ссылку на эту библиотеку, называемую lib_pywrap_tensorflow.soгде-нибудь, где ваша система сборки найдет ее (например /usr/lib/local). Префикс libважен! Вы также можете дать ему другое lib*.soимя - если вы его называете libtensorflow.so, вы можете получить лучшую совместимость с другими программами, написанными для работы с TF.

Затем создайте проект C ++, как вы привыкли (CMake, Make, Bazel, все, что вам нравится).

И тогда вы готовы просто сделать ссылку на эту библиотеку, чтобы TF был доступен для ваших проектов (и вам также нужно сделать ссылку на python2.7библиотеки)! В CMake вы, например, просто добавляете target_link_libraries(target _pywrap_tensorflow python2.7).

Заголовочные файлы C ++ расположены вокруг этой библиотеки, например, в /usr/local/lib/python2.7/dist-packages/tensorflow/include/.

Еще раз: этот способ официально не поддерживается, и вы можете столкнуться с различными проблемами. Библиотека выглядит статически связанной, например, с protobuf, поэтому вы можете работать в нечетных проблемах во время соединения или во время выполнения. Но я могу загрузить сохраненный график, восстановить веса и выполнить вывод, который является IMO наиболее востребованным функционалом в C ++.

Автор: Martin Pecka Размещён: 26.04.2017 09:05

10 плюса

1726 Репутация автора

Во-первых, после установки protobufи eigenвы хотите собрать Tensorflow:

./configure
bazel build //tensorflow:libtensorflow_cc.so

Затем скопируйте следующие заголовки и динамическую общую библиотеку в /usr/local/libи /usr/local/include:

mkdir /usr/local/include/tf
cp -r bazel-genfiles/ /usr/local/include/tf/
cp -r tensorflow /usr/local/include/tf/
cp -r third_party /usr/local/include/tf/
cp -r bazel-bin/libtensorflow_cc.so /usr/local/lib/

Наконец, скомпилируйте, используя пример:

g++ -std=c++11 -o tf_example \
-I/usr/local/include/tf \
-I/usr/local/include/eigen3 \
-g -Wall -D_DEBUG -Wshadow -Wno-sign-compare -w  \
-L/usr/local/lib/libtensorflow_cc \
`pkg-config --cflags --libs protobuf` -ltensorflow_cc tf_example.cpp
Автор: lababidi Размещён: 11.05.2017 03:55

4 плюса

170 Репутация автора

Если вы не возражаете против использования CMake, существует также проект tenorflow_cc, который создает и устанавливает для вас TF C ++ API, а также удобные цели CMake, с которыми вы можете ссылаться. Проект README содержит пример и файлы Docker, которым вы можете легко следовать.

Автор: Floop Размещён: 19.06.2017 08:53

8 плюса

128 Репутация автора

Если вы планируете использовать Tensorflow c ++ api в автономном пакете, вам, вероятно, понадобится tenorflow_cc.so (есть также версия ac apiensororflow.so) для сборки версии c ++, которую вы можете использовать:

bazel build -c opt //tensorflow:libtensorflow_cc.so

Примечание 1: Если вы хотите добавить встроенную поддержку, вы можете добавить следующие флаги: --copt=-msse4.2 --copt=-mavx

Примечание 2: Если вы планируете использовать OpenCV и в своем проекте, существует проблема при использовании обеих библиотек вместе ( проблема с тензорным потоком ), и вам следует это использовать --config=monolithic.

После создания библиотеки вам необходимо добавить ее в свой проект. Для этого вы можете включить следующие пути:

tensorflow
tensorflow/bazel-tensorflow/external/eigen_archive
tensorflow/bazel-tensorflow/external/protobuf_archive/src
tensorflow/bazel-genfiles

И свяжите библиотеку с вашим проектом:

tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so (unused if you build with --config=monolithic)
tensorflow/bazel-bin/tensorflow/libtensorflow_cc.so

И когда вы создаете свой проект, вы также должны указать своему компилятору, что вы собираетесь использовать стандарты c ++ 11.

Дополнительное примечание: Пути относительно версии тензорного потока 1.5 (возможно, вам потребуется проверить, изменилось ли что-нибудь в вашей версии).

Также эта ссылка очень помогла мне найти всю эту информацию: ссылка

Автор: Renan Wille Размещён: 11.04.2018 01:02

5 плюса

148 Репутация автора

Если вы не хотите собирать Tensorflow самостоятельно, а ваша операционная система - Debian или Ubuntu, вы можете загрузить готовые пакеты с библиотеками Tensorflow C / C ++. Этот дистрибутив можно использовать для вывода C / C ++ с процессором, поддержка GPU не включена:

https://github.com/kecsap/tensorflow_cpp_packaging/releases

Написаны инструкции, как заморозить контрольную точку в Tensorflow (TFLearn) и загрузить эту модель для вывода с помощью API C / C ++:

https://github.com/kecsap/tensorflow_cpp_packaging/blob/master/README.md

Осторожно: я разработчик этого проекта на Github.

Автор: kecsap Размещён: 05.05.2018 09:56

1 плюс

11 Репутация автора

Лучший ресурс для приложений тензорного потока C ++, который я могу найти, находится здесь: https://github.com/rockzhuang/tensorflow

Автор: Rock Zhuang Размещён: 14.02.2019 07:57
Вопросы из категории :
32x32