tensorflow c++ 加載模型

? ?tensorflow的官網(wǎng)上提供很詳細(xì)的python教程,也確實(shí)很好用凡辱。但是,python始終是一個(gè)開發(fā)工具燕少,應(yīng)用軟件產(chǎn)品男窟,大多用c/c++寫的盆赤。所以,我打算用python訓(xùn)練tensorflow模型歉眷,然后用c++調(diào)用tensorflow模型牺六。本人通過收集資料,總結(jié)了方法汗捡。本文主要講解一下內(nèi)容:

  • tensorflow c++加載訓(xùn)練好的模型淑际。

注:均在ubuntu上實(shí)現(xiàn)

1.使用python訓(xùn)練模型,并保存模型扇住。

a.訓(xùn)練模型春缕,保存模型

利用tf.train.Saver()進(jìn)行保存模型。

sess = tf.InteractiveSession() ##session
saver = tf.train.Saver()  ###需要添加的代碼艘蹋,在初始化變量前锄贼。
sess.run(tf.initialize_all_variables())
#your code
#....訓(xùn)練過程....
#your code
saver.save(sess, "model/model.ckpt") ###保存模型在model目錄下

model目錄下生成的文件:

  • checkpoint
  • model.ckpt.data-00000-of-00001
  • model.ckpt.index
  • model.ckpt.meta

b.模型整合

調(diào)用tensorflow自帶的 freeze_graph.py 小工具, 輸入為格式.pb或.pbtxt的protobuf文件和.ckpt的參數(shù)文件女阀,輸出為一個(gè)新的同時(shí)包含圖定義和參數(shù)的.pb文件宅荤;這個(gè)步驟的作用是把checkpoint .ckpt文件中的參數(shù)轉(zhuǎn)化為常量const operator后和之前的tensor定義綁定在一起。

python freeze_graph.py --input_checkpoint=../ckpt/model.ckpt -- \
output_graph=../model/model_frozen.pb --output_node_names=output_node  

得到model_frozen.pb最終模型

2.使用c++加載模型浸策。

a.頭文件包含

#include "tensorflow/core/public/session.h"
#include "tensorflow/core/platform/env.h"

using namespace tensorflow;

b.tensorflow模型初始化

//加載tensorflow模型
Session *session;
cout << "start initalize session" << "\n";
Status status = NewSession(SessionOptions(), &session);
if (!status.ok()) {
     cout << status.ToString() << "\n";
     return 1;
  }
GraphDef graph_def;
status = ReadBinaryProto(Env::Default(),MNIST_MODEL_PATH, &graph_def);
//MNIST_MODEL_PATH為模型的路徑冯键,即model_frozen.pb的路徑
if (!status.ok()) {
     cout << status.ToString() << "\n";
     return 1;
  }
status = session->Create(graph_def);
if (!status.ok()) {
     cout << status.ToString() << "\n";
     return 1;
 }
cout << "tensorflow加載成功" << "\n";

c.模型預(yù)測(cè)

Tensor x(DT_FLOAT, TensorShape({1, 784}));//定義輸入張量,包括數(shù)據(jù)類型和大小的榛。
std::vector<float> mydata;        //輸入數(shù)據(jù)琼了,784維向量
auto dst = x.flat<float>().data();     
copy_n(mydata.begin(), 784, dst);      //復(fù)制mydata到dst
vector<pair<string, Tensor>> inputs = {
    { "input", x}
};                                     //定義模型輸入
vector<Tensor> outputs;                //定義模型輸出
Status status = session->Run(inputs, {"softmax"}, {}, &outputs);  //調(diào)用模型,
//輸出節(jié)點(diǎn)名為softmax,結(jié)果保存在output中。
if (!status.ok()) {
    cout << status.ToString() << "\n";
    return 1;
}
//get the final label by max probablity
Tensor t = outputs[0];                   // Fetch the first tensor
int ndim = t.shape().dims();             // Get the dimension of the tensor
auto tmap = t.tensor<float, 2>();       
 // Tensor Shape: [batch_size, target_class_num]
 // int output_dim = t.shape().dim_size(1); 
 // Get the target_class_num from 1st dimension
//將結(jié)果保存在softmax數(shù)組中(該模型是多輸出模型)
double softmax[9];  
for (int j = 1; j < 10; j++) {
    softmax[j-1]=tmap(0, j);
}


參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末燥爷,一起剝皮案震驚了整個(gè)濱河市蜈亩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌前翎,老刑警劉巖稚配,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異港华,居然都是意外死亡道川,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門立宜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冒萄,“玉大人,你說我怎么就攤上這事橙数∽鹆鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵灯帮,是天一觀的道長(zhǎng)崖技。 經(jīng)常有香客問我,道長(zhǎng)钟哥,這世上最難降的妖魔是什么响疚? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮瞪醋,結(jié)果婚禮上忿晕,老公的妹妹穿的比我還像新娘。我一直安慰自己银受,他們只是感情好践盼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宾巍,像睡著了一般咕幻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顶霞,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天肄程,我揣著相機(jī)與錄音锣吼,去河邊找鬼。 笑死蓝厌,一個(gè)胖子當(dāng)著我的面吹牛玄叠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拓提,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼读恃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了代态?” 一聲冷哼從身側(cè)響起寺惫,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹦疑,沒想到半個(gè)月后西雀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歉摧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蒋搜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判莉。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖育谬,靈堂內(nèi)的尸體忽然破棺而出券盅,到底是詐尸還是另有隱情,我是刑警寧澤膛檀,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布锰镀,位于F島的核電站,受9級(jí)特大地震影響咖刃,放射性物質(zhì)發(fā)生泄漏泳炉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一嚎杨、第九天 我趴在偏房一處隱蔽的房頂上張望花鹅。 院中可真熱鬧,春花似錦枫浙、人聲如沸刨肃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽真友。三九已至,卻和暖如春紧帕,著一層夾襖步出監(jiān)牢的瞬間盔然,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愈案,地道東北人挺尾。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像刻帚,于是被迫代替她去往敵國(guó)和親潦嘶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容