當前位置: 首頁>>技術問答>>正文


如何構建和使用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/zh-tw/article/3600.html,未經允許,請勿轉載。