tensorflow目前支持最好的語言仍是python,但大部分服務都用C++ or Java開發,通常採用動態連接庫(.so)方式調用算法,所以tensorflow的c/c++ API仍是有必要熟悉下,並且通過本人測試,相同算法,c接口相比python速度更快。html
下面講解如何讓程序調用tensorflow c/c++庫python
1.編譯庫linux
先在github上下載tensorflow源碼,執行./configure先配置項目,而後按照這篇博客裏寫的利用bazel編譯動態連接庫,編譯命令以下ios
C版本:c++
bazel build :libtensorflow.sogit
C++版本:github
bazel build :libtensorflow_cc.so算法
編譯成功後,在bazel-bin/tensorflow/目錄下會出現libtensorflow.so/libtensorflow_cc.so文件session
2.其餘依賴測試
在使用tensorflow c/c++接口時,會有不少頭文件依賴、protobuf版本依賴等問題
(1)tensorflow/contrib/makefile目錄下,找到build_all_xxx.sh文件並執行,例如準備在linux上使用,就執行build_all_linux.sh文件,成功後會出現一個gen文件夾
(2)把tensorflow和bazel-genfiles文件夾下的頭文件都抽取出來放在一個文件夾下面,或者經過cmake把這兩個路徑添加進include_directories中
(3)tensorflow/contrib/makefile/gen/protobuf/include,也就是(1)中生成的文件夾中的頭文件,也須要抽取或者在cmake中包含在include_directories中
3.編寫代碼
隨便編寫一段使用tf的代碼,例以下面:
#include <tensorflow/core/platform/env.h> #include <tensorflow/core/public/session.h> #include <iostream> using namespace std; using namespace tensorflow; int main() { Session* session; Status status = NewSession(SessionOptions(), &session); if (!status.ok()) { cout << status.ToString() << "\n"; return 1; } cout << "Session successfully created.\n"; }
4.生成可執行文件
把libtensorflow_cc.so文件放在lib文件夾下,代碼放在src文件夾下,編寫cmakelist.txt,具體文件結構以下:
CMakeLists.txt
/src
/lib
/include
/build
下面是一個例子:
cmake_minimum_required (VERSION 2.8.8) project (tf_example) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W") aux_source_directory(./src DIR_SRCS) link_directories(./lib) include_directories( path_to_tensorflow/tensorflow path_to_tensorflow/tensorflow/bazel-genfiles path_to_tensorflow/tensorflow/contrib/makefile/gen/protobuf/include ) add_executable(tf_test ${DIR_SRCS}) target_link_libraries(tf_example tensorflow_cc)
接下來執行命令:
cd build
cmake ..
make
會生成一個tf_test可執行文件,執行無誤即大功告成