我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
我真的很渴望开始使用谷歌在c++中的新Tensorflow库。网站和文档在如何构建项目的c++ API方面真的不清楚,我不知道从哪里开始。
是否有更有经验的人可以通过发现和分享使用tensorflow的c++ API的指南来帮助您?
当前回答
为了补充@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
其他回答
如果你希望避免使用Bazel构建项目和生成大型二进制文件,我已经组装了一个库,指导使用CMake TensorFlow c++库。你可以在这里找到它。总体思路如下:
克隆TensorFlow存储库。 在tensorflow/ build中添加一个构建规则(提供的规则不包括所有c++功能)。 构建TensorFlow共享库。 安装特定版本的Eigen和Protobuf,或将它们作为外部依赖项添加。 配置你的CMake项目来使用TensorFlow库。
你可以使用这个ShellScript来安装(大多数)它的依赖,克隆,构建,编译和得到所有必要的文件到../ src /包括文件夹:
https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh
如果你想在一个独立的包上使用Tensorflow c++ api,你可能需要tensorflow_cc。还有一个c api版本的tensorflow。所以)构建c++版本,你可以使用:
bazel build -c opt //tensorflow:libtensorflow_cc.so
注1:如果你想添加intrinsic支持,你可以添加这样的标志:——copt=-msse4.2——copt=-mavx
注2:如果你想在你的项目中也使用OpenCV,当同时使用两个库时(tensorflow问题),你应该使用——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标准。
附注:相对于tensorflow版本1.5的路径(您可能需要检查您的版本中是否有任何更改)。
这个链接也帮助我找到了所有这些信息:链接
为了补充@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
我使用了一种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++中最想要的功能。