当前位置: 首页>>技术问答>>正文


如何构建和使用Google TensorFlow C++ api

问题:如何构建谷歌Tensorflow C++ API?

我想在C++中使用Google新的Tensorflow库。但是,官方网站和文档在如何构建项目的C++ API方面讲解的不太清楚,我不知道应该如何着手。

求有经验的人分享使用tensorflow的相关经验?!

推荐的解决方法

刚开始的话,先要从Github下载源代码,可以按这里的说明来操作从源码安装,需要注意的是:安装之前,应该要有Bazel和最近版本的GCC)。

Tensorflow C++ API(以及系统的后端)在tensorflow/core这个模块中,目前只支持2中形式:C++ Session interface(C++会话接口)C API。可以使用这2中之一来执行TensorFlow图(使用Python API构建的序列化为GraphDef协议缓冲区)。还有一个用C++构建图形的实验功能,但是目前它并不像Python API那样像支持全部功能(full-featured),例如目前不支持auto-differentiation。可以看到builds a small graph in C++ here(在C++中构建简单的Graph)的示例程序。

C++ API的第二部分是用于添加新的OpKernel的API,它是包含用于CPU和GPU的数字内核的实现的类。在tensorflow/core/kernels以及tutorial for adding a new op in C++中有大量关于如何构建的示例。

对上述推荐方法的补充

作为对上述推荐方法的补充,我整理了一个教程,介绍如何使用C++ API加载TensorFlow图。这应该能帮助了解所有的片段如何组合在一起。具体内容如下:

要求:

  • 安装了Bazel

  • 克隆TensorFlow repo

文件夹结构:

  • tensorflow/tensorflow/|project name|/

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

  • tensorflow/tensorflow/|project name|/BUILD

构建:

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

解决方法的两个注意事项:

  • 构建需要在TensorFlow repo中进行。

  • 编译后的二进制文件非常大(103MB)。

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

其他解决思路一

如果想要避免使用Bazel构建项目并生成大型二进制文件,那么我已经组建了一个存储库,指导如何使用CMake构建TensorFlow C++库。可以在这里找到它here。总体思路如下:

  • 克隆TensorFlow存储库。

  • tensorflow/BUILD添加构建规则(提供的规则不要包括所有C++功能)。

  • 构建TensorFlow共享库。

  • 安装Eigen和Protobuf的特定版本,或将其作为外部依赖关系添加进来。

  • 配置CMake项目以便使用TensorFlow库。

其他解决思路二

可以使用下面这个ShellScript来安装(大多数)依赖项,克隆,构建,编译并将所有必需的文件都安装到../src/includes文件夹中:

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

其他解决思路三

首先安装protobufeigen,并构建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

本文整理自:

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/3600.html,未经允许,请勿转载。