我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
当前回答
首先,在安装了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
其他回答
如果你希望避免使用Bazel构建项目和生成大型二进制文件,我已经组装了一个库,指导使用CMake TensorFlow c++库。你可以在这里找到它。总体思路如下:
克隆TensorFlow存储库。 在tensorflow/ build中添加一个构建规则(提供的规则不包括所有c++功能)。 构建TensorFlow共享库。 安装特定版本的Eigen和Protobuf,或将它们作为外部依赖项添加。 配置你的CMake项目来使用TensorFlow库。
我们现在在https://github.com/ika-rwth-aachen/libtensorflow_cc上提供了一个预构建的库和Docker镜像,方便TensorFlow c++ API的安装和使用
我们提供了预构建的libtensorflow_cc。因此,将附带的头文件作为一个命令安装deb-package。 我们提供了一个基于官方TensorFlow Docker镜像的预构建Docker镜像。我们的Docker镜像同时安装了TensorFlow Python和TensorFlow c++。
通过运行示例应用程序自己尝试一下:
git clone https://github.com/ika-rwth-aachen/libtensorflow_cc.git && \
cd libtensorflow_cc && \
docker run --rm \
--volume $(pwd)/example:/example \
--workdir /example \
rwthika/tensorflow-cc:latest \
./build-and-run.sh
虽然我们目前只支持运行Ubuntu的x86_64机器,但将来可以很容易地扩展到其他操作系统和平台。除了一些例外,TensorFlow从2.0.0到2.9.2的所有版本都可用,2.10.0即将推出。
如果你想使用TensorFlow c++ API在c++中加载、检查和运行保存的模型和冻结的图形,我们建议你也检查我们的帮助库tensorflow_cpp。
你可以使用这个ShellScript来安装(大多数)它的依赖,克隆,构建,编译和得到所有必要的文件到../ src /包括文件夹:
https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh
为了补充@mrry的帖子,我整理了一个教程,解释如何用c++ API加载TensorFlow图。它非常简单,应该帮助您理解所有的部分是如何组合在一起的。这是它的核心:
要求:
巴泽尔安装 克隆TensorFlow回购
文件夹结构:
tensorflow tensorflow / | | /项目名称 Tensorflow / Tensorflow /|项目名称|/|项目名称|。Cc(例如https://gist.github.com/jimfleming/4202e529042c401b17b7) tensorflow / tensorflow / | |项目名称/构建
构建:
cc_binary(
name = "<project name>",
srcs = ["<project name>.cc"],
deps = [
"//tensorflow/core:tensorflow",
]
)
有两点需要注意,但可能有变通办法:
现在,构建需要在TensorFlow回购中进行。 编译后的二进制文件很大(103MB)。
https://medium.com/@jimfleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
首先,您应该按照这里的说明从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++中添加新操作的教程。