tensorflow c++ api 預(yù)測python訓(xùn)練好的模型

一.安裝說明:

1.安裝bazel, Eigen

1)安裝bazel

本人采用的源碼安裝方式,在https://github.com/bazelbuild/bazel/releases上下載

與硬件配置相關(guān)的安裝源碼。如在linux的64位系統(tǒng)下,可以下載bazel-0.19.2 installer linux-x86_64.sh(注意,tensorflow 的編譯對于bazel 對應(yīng)版本有要求,1.13對應(yīng)的是bazel-0.19.2,如果版本有誤,會編譯不通過),并執(zhí)行shell文件安裝。具體版本需求請參照

https://www.tensorflow.org/install/source

2)安裝Eigen

說明: Eigen 是一個高層次的C++庫,有效支持線性代數(shù),矩陣和矢量運算,數(shù)值分析及其相關(guān)的算法。Eigen是一個開源庫,從3.1.1版本開始遵從MPL2許可,如果在tensorflow的build前沒有安裝eigen,在bazel的build過程中會報如下錯誤:

/tensorflow/core/framework/tensor. types h:19:10:fatal

error: /third_ party/eigen3/unsupported/Eigen/CXX1/Tensor. No such file or directory

include "third party/eigen3/unsupported/Eigen/CXX11/Tensor"

compilation terminated.

Target //tensorflow/core::tensorfiow failed to build

安裝說明:

1. apt-get方式(假設(shè)默認(rèn)安裝到usr/local/include里(可在終端中輸入locate eigen3查看? 位置),若實際中默認(rèn)安裝到/usrs/include的話,可以對應(yīng)替換下面命令的相應(yīng)部分)

運行命令:

sudo apt-get install libeigen3-dev

運行命令: (參考第二種方法的最下面的說明)

sudo cp -r /usr/local/include/eigen3/Eigein /usr/local/include執(zhí)行復(fù)制命令,將Eigen文件夾及其內(nèi)容放在/usr/include

2.下載源碼包和安裝protocbuf

git clone -recursive https://github.com/tensorflow/tensorflow

cd tensorflow/contrib/makefile

./build_all_linux.sh

./configure

至此,tensorflow 配置完畢.

?說明:安裝protobuf??

Protocol Buffers? (簡稱Protobuf) 是Google開源的一款跨語言,跨平臺,拓展性好的? 序列化工具,網(wǎng)上有許多安裝? protoc的教程,但是我推薦最好使用tesorflow源碼包里面的build_ alllinux.sh進(jìn)行protobuf的自動安裝,這樣,protoc 的版本和tensorflow的版本是對應(yīng)的(import)

cd tensoflow/tensorflow/contrib/makefile && /build alllindex.sh

查看版本以驗證安裝: protoc --version


二.編譯過程

編譯過程有兩種方式,種是使用 bazel build的方式,直接在源碼的workspace里面去編譯:另一種, 是使用先編譯動態(tài)鏈接庫。再使用編譯好的so文件,實現(xiàn)具體的compilation任務(wù)。

1)

bazel build -C opt <target>

其中copt的含義為--compilation_ mode=opt, 也可以用以下形式表現(xiàn):

config. setting(

name=" simple',

values = {"compilation. mode":"opt"})

若需要在GPU上執(zhí)行,則添加一個config選項

bazel build C opt -copt=mavx -config=cuda <target>

舉例說明:

編寫示例程序demo.cc

#include <iostream>

#include "tensorflow/cc/client/client_session.h"

#include tensorflow/cc/ops/standard_ops.h"

int main(){

using namespace tensorflow;

using namespace tensorflow ops;

Scope root = Scope NewRootScope():

//MatrixA=[3:2:-10]

auto A= Const(root, {3.f,2.f},{-1f,0.f)\});

//Vector b=[3 5]

auto b= Const(root, {3.f,5.f });

auto v=MatMul(root WithOpName("v", A, b, MatMul:TransposeB(true));

std:vector<Tensor> outputs;

ClientSession session(root);

mkdir tensorflow/demo

demo.cc放到tensorflow/demo 文件夾

BUILD文件寫為

cc_binary(

? ? name="demo", srcs=["demo.cc"],

? ? deps=["http://tensorflow/cc:cc_ops",

? ? ? ? ? ? ? ? "http://tensorflow/cc:client_session",

? ? ? ? ? ? ? ? "http://tensorflow/core:tensorflow"]])

運行 bazel build- opt demo? 生成demo可執(zhí)行文件,生成可執(zhí)行文件的位置在 bazel-bin/tensorflow/demo/demo

運行示例:

?bazel-bin/tensorflow/demo/demo

2019-09-0615:10:59.905602: tensorflow/demo/democc:219

2)方法二:先編譯動態(tài)鏈接庫

?bazel build//tensorflow:libtensorflow_cc.so

建立 TensorFlow庫文件夾: sudo mkdir/usrr/local/tensorflow

復(fù)制 include文件:

?mkdir /usr/local/tensorflow/include

?cp -r bazel-genfiles/ /usr/local/tensorflow/include/tf? cp-r tensorflow/*/usr/local/tensorflow/include/tf/tensorflow

?cp -r third_party /usr/local/tensorflow/include/tf

復(fù)制lib文件:

?sudo mkdir /usr/local/tensorflow/lib??

?sudo cp-r bazel-bin/tensorflow/libtensorflow_cc.so/usr/local/tensorflow/lib/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容