Tensorflow C api 開發 例一

2021-08-27 11:36:27 字數 2334 閱讀 8553

在獲得libtensorflow_cc.so和libtensorflow_framework.so庫後,開始進行c++api開發

編寫原始檔

原始檔:test.cc

#include "/home/zhouxd/tools/tensorflow-master/tensorflow/core/public/session.h"

#include

using

namespace

std;

using

namespace tensorflow;

int main()

cout

<< "session successfully created.\n";

}

該例子的任務是新建乙個session並判斷是否成功建立。

2.cmakelists.txt

cmake_minimum_required (version 2.8.8)

project (tf_test)

set(cmake_cxx_flags "$ -g -std=c++11 -w")

link_directories(./lib)

include_directories(

/home/zhouxd/tools/tensorflow-master

/home/zhouxd/tools/tensorflow-master/bazel-genfiles

/home/zhouxd/tools/eigen3

/home/zhouxd/tools/protobuf_bin/include

/home/zhouxd/tools/nsync-1.20.0/public

) add_executable(tf_test test.cc)

target_link_libraries(tf_test tensorflow_cc tensorflow_framework)

說明:

- link_directories所指路徑是編譯好的tensorflow動態庫的路徑

- tensorflow-master是tensorflow的原始碼路徑

- eigen3是eigen3的目錄

- nsync-1.20.0是nsync的安裝目錄

- protobuf_bin是protobuf的安裝目錄,tensorflow用到了protobuf,如果不包含這個路徑,編譯的時候不會提示缺少某標頭檔案,而是會提示某某標頭檔案的版本不對。一般來說,在安裝protobuf時已經將這個路徑加到環境變數中了,此時在開發環境中不加也沒關係,但如果要轉移到其他環境,就需要拷貝這個目錄幷包含。

有意思的是,通過tensorflow原始碼也能生成這個目錄,在原始碼的tensorflow/contrib/makefile目錄下,找到build_all_***.sh檔案並執行(不要用sh命令,直接執行),成功後會出現乙個gen資料夾,gen檔案下面也有個protobuf/include資料夾,包含這個資料夾也是可以的。

/home/zhouxd/

.cache/bazel/_bazel_zhouxd/3ea11f2719d18e25c3b1b9955bf36e24/execroot/org_tensorflow/bazel-out/k8-opt/genfiles/

可以看到該路徑是在使用者根目錄下生成的,有意思的一點是該目錄下也有乙個tensorflow資料夾,就像原始碼目錄(tensorflow-master)下存在乙個tensorflow資料夾放置一些標頭檔案一樣,這個資料夾下則有許多在編譯動態庫時生成的標頭檔案,這些對c++ api來說必不可缺的。

在編譯的時候,程式會從原始碼目錄下的tensorflow資料夾裡尋找所需標頭檔案,同時也會從該目錄下的tensorflow資料夾裡尋找檔案。

值得注意的是,在程式打包或遷移環境的時候很容易會忘掉這個資料夾,造成標頭檔案缺失,往往是該檔案沒有拷貝走,bazel-genfiles指不到地方,打包時可以把該目錄下的tensorflow目錄與原始碼的tensorflow目錄合併。這樣include乙個資料夾即可。同樣的,其他依賴庫的標頭檔案在打包時也要注意是否存在,可以把這些目錄單獨拷貝出來整理。

編譯

mkdir build

cd ./build

cmake ..

make

執行生成的tf_test,輸出session successfully created.即表示成功

Structured Streaming 開發入門

structured streaming 作為 spark 家族的新成員,通過 spark sql dataframe 來處理 batch streaming 資料,基本的 sparksql api 即可實現離線處理和流式處理,大大的方便了流式計算的開發,另外還提供了豐富的功能。structured...

傳奇開服怎麼開的起來?

有很多想開服的朋友都會問我,傳奇開服怎麼開的起來?其實這個問題從層面上講是有些模糊的,怎麼開的起來?淺層面來看,有伺服器 版本 備案網域名稱和平台就可以開起來 沒有技術的怎麼辦呢?沒有技術的建議大家先學會一些基礎的開服技術,例如架設 搭站 開區合區 微端配置 登入器配置和設定gm號這些,真的不難,不...

電腦開不開機 且開且珍惜

電腦開不開機了?這個確實有點棘手 不過大多數的時候都不會有太大問題 我在哈工大電腦110俱樂部做電腦義診的時候也經常遇到這種情況,今天就和大家談一談經驗。按電源鍵,燈不亮,沒反應 這種情況 遇見過!這種情況多半是電腦拆機清灰之後或是電腦受到了重創。有些不細心的志願者拆機之後忘了把電源排線插上是時有發...