tensorflow c/c++庫使用方法


tensorflow目前支持最好的語言還是python,但大部分服務都用C++ or Java開發,一般采用動態鏈接庫(.so)方式調用算法,因此tensorflow的c/c++ API還是有必要熟悉下,而且經過本人測試,相同算法,c接口相比python速度更快。

下面講解如何讓程序調用tensorflow c/c++庫

 

1.編譯庫

先在github上下載tensorflow源碼,執行./configure先配置項目,然后按照這篇博客里寫的利用bazel編譯動態鏈接庫,編譯命令如下

C版本:

bazel build :libtensorflow.so

C++版本:

bazel build :libtensorflow_cc.so

編譯成功后,在bazel-bin/tensorflow/目錄下會出現libtensorflow.so/libtensorflow_cc.so文件

 

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可執行文件,執行無誤即大功告成

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM