Я действительно хочу начать использовать новую библиотеку Google Tensorflow на C ++. Веб-сайт и документы просто неясны с точки зрения того, как создать C ++ API проекта, и я не знаю, с чего начать.
Может ли кто-то с большим опытом помочь найти и поделиться руководством по использованию C ++ API tenorflow?
c++
tensorflow
theideasmith
источник
источник
Ответы:
Я обнаружил, что одной из альтернатив использования Tensorflow C ++ API является использование cppflow .
Это облегченная оболочка C ++ для Tensorflow C API . Вы получаете очень маленькие исполняемые файлы, и они ссылаются на
libtensorflow.so
уже скомпилированный файл. Есть также примеры использования, и вы используете CMAKE вместо Bazel.источник
Для начала вам необходимо скачать исходный код с 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, я собрал учебник, который объясняет, как загрузить граф TensorFlow с помощью API C ++. Это очень минимально и должно помочь вам понять, как все части сочетаются друг с другом. Вот мясо этого:
Требования:
Структура папки:
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:
Два предостережения, для которых есть, вероятно, обходные пути:
https://medium.com/@jimfleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
источник
./loader
я получаю сообщение об ошибке:Not found: models/train.pb
.Если вы хотите избежать как создания своих проектов с помощью Bazel, так и генерации большого двоичного файла, я собрал репозиторий, инструктирующий использование библиотеки TensorFlow C ++ с CMake. Вы можете найти это здесь . Общие идеи заключаются в следующем:
tensorflow/BUILD
(предоставленные не включают в себя все функциональные возможности C ++).источник
Во-первых, после установки
protobuf
иeigen
вы хотите собрать Tensorflow:Затем скопируйте следующие заголовки и динамическую общую библиотеку в
/usr/local/lib
и/usr/local/include
:Наконец, скомпилируйте, используя пример:
источник
Если вы планируете использовать Tensorflow c ++ api в автономном пакете, вам, вероятно, понадобится tenorflow_cc.so (также существует версия ac apiensororflow.so) для сборки версии c ++, которую вы можете использовать:
Примечание 1: Если вы хотите добавить встроенную поддержку, вы можете добавить следующие флаги:
--copt=-msse4.2 --copt=-mavx
Примечание 2: Если вы планируете использовать OpenCV и в своем проекте, существует проблема при использовании обеих библиотек вместе ( проблема с тензорным потоком ), и вы должны это использовать
--config=monolithic
.После создания библиотеки вам необходимо добавить ее в свой проект. Для этого вы можете включить следующие пути:
И свяжите библиотеку с вашим проектом:
И когда вы создаете свой проект, вы также должны указать своему компилятору, что вы собираетесь использовать стандарты c ++ 11.
Дополнительное примечание: Пути относительно версии тензорного потока 1.5 (возможно, вам потребуется проверить, изменилось ли что-нибудь в вашей версии).
Также эта ссылка очень помогла мне найти всю эту информацию: ссылка
источник
tensorflow/bazel-tensorflow/external/com_google_absl
Вы можете использовать этот ShellScript для установки (большей части) его зависимостей, клонирования, сборки, компиляции и получения всех необходимых файлов в
../src/includes
папку:https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh
источник
Если вы не возражаете против использования CMake, существует также проект tenorflow_cc, который создает и устанавливает для вас TF C ++ API, а также удобные цели CMake, с которыми вы можете ссылаться. Проект README содержит пример и Dockerfiles, которым вы можете легко следовать.
источник
Если вы не хотите собирать 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.
источник
Я использую хак / обходной путь, чтобы избежать необходимости собирать всю библиотеку 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 ++.
источник
undefined reference to 'PyType_IsSubtype'
python2.7
библиотеку ... Я отредактирую сообщение соответственно.Сам Tensorflow предоставляет только самые простые примеры API C ++.
Вот хороший ресурс, который включает примеры наборов данных, rnn, lstm, cnn и другие
примеры tenorflow c ++
источник
Ответы выше достаточно хороши, чтобы показать, как собрать библиотеку, но как собрать заголовки все еще сложно. здесь я делюсь небольшим сценарием, который я использую для копирования необходимых заголовков.
SOURCE
является первым параметром, который является директорией источника (сборки) тензорного потока;DST
это второй параметр, которыйinclude directory
содержит собранные заголовки. (например, в cmake,include_directories(./collected_headers_here)
).источник
mkdir -p $DST/tensorflow$target_dir
раньшеcp $line $DST/tensorflow/$target_dir