我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
当前回答
如果你不想自己构建Tensorflow,而且你的操作系统是Debian或Ubuntu,你可以下载带有Tensorflow C/ c++库的预构建包。这个发行版可以用于CPU的C/ c++推理,GPU支持不包括在内:
https://github.com/kecsap/tensorflow_cpp_packaging/releases
这里有一些关于如何在Tensorflow (TFLearn)中冻结检查点的说明,并使用C/ c++ API加载这个模型进行推理:
https://github.com/kecsap/tensorflow_cpp_packaging/blob/master/README.md
注意:我是这个Github项目的开发者。
其他回答
首先,您应该按照这里的说明从Github下载源代码(您需要Bazel和最新版本的GCC)。
The C++ API (and the backend of the system) is in tensorflow/core. Right now, only the C++ Session interface, and the C API are being supported. You can use either of these to execute TensorFlow graphs that have been built using the Python API and serialized to a GraphDef protocol buffer. There is also an experimental feature for building graphs in C++, but this is currently not quite as full-featured as the Python API (e.g. no support for auto-differentiation at present). You can see an example program that builds a small graph in C++ here.
c++ API的第二部分是用于添加新的OpKernel的API,这是一个包含CPU和GPU的数值内核实现的类。在tensorflow/core/kernels中有许多如何构建这些操作的示例,以及在c++中添加新操作的教程。
如果你不介意使用CMake,还有tensorflow_cc项目可以为你构建和安装TF c++ API,以及方便的CMake目标,你可以链接到它。项目README包含一个示例和Dockerfiles,您可以轻松地遵循。
Tensorflow本身只提供了关于c++ api的非常基本的示例。 这是一个很好的资源,包括数据集的例子,rnn, lstm, cnn等 Tensorflow c++的例子
我使用了一种hack/workaround来避免自己构建整个TF库(这节省了时间(3分钟即可完成设置)、磁盘空间、安装开发依赖项以及生成二进制文件的大小)。它是官方不支持的,但如果你只是想快速上手,效果很好。
Install TF through pip (pip install tensorflow or pip install tensorflow-gpu). Then find its library _pywrap_tensorflow.so (TF 0.* - 1.0) or _pywrap_tensorflow_internal.so (TF 1.1+). In my case (Ubuntu) it's located at /usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so. Then create a symlink to this library called lib_pywrap_tensorflow.so somewhere where your build system finds it (e.g. /usr/lib/local). The prefix lib is important! You can also give it another lib*.so name - if you call it libtensorflow.so, you may get better compatibility with other programs written to work with 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,所以你可能会在奇怪的链接时间或运行时问题中运行。但是我能够加载存储的图形,恢复权重并运行推理,这是我在c++中最想要的功能。
首先,在安装了protobuf和eigen之后,你想要构建Tensorflow:
./configure
bazel build //tensorflow:libtensorflow_cc.so
然后复制以下include头文件和动态共享库到/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