日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c语言调用tensorflow模型,C++调用Python中的Tensorflow模型

發布時間:2023/12/19 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言调用tensorflow模型,C++调用Python中的Tensorflow模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++調用Python中的Tensorflow模型

利用c++調用Python2.7的程序,加載tensorflow模型(為什么不使用Python3,坑太多了,一直解決不好)。整個環境在Ubuntu16.04下完成,利用了kDevelop4 IDE編寫C++程序,以及cmake文件。

保存tensorflow模型

首先利用Python寫一段tensorflow保存模型的代碼:

import tensorflow as tf

import os

def save_model_ckpt(ckpt_file_path):

x = tf.placeholder(tf.int32,name='x')

y = tf.placeholder(tf.int32,name='y')

b = tf.Variable(1,name='b')

xy = tf.multiply(x,y)

op = tf.add(xy,b,name='op_to_store')

sess = tf.Session()

sess.run(tf.global_variables_initializer())

path = os.path.dirname(os.path.abspath(ckpt_file_path))

if os.path.isdir(path) is False:

os.makedirs(path)

tf.train.Saver().save(sess,ckpt_file_path)

feed_dict = {x:4,y:3}

print(sess.run(op,feed_dict))

save_model_ckpt('./model/model.ckpt')

這會在model目錄下回保存四個文件

模型加載代碼

#classify.py

import tensorflow as tf

def evaluate(pic):

sess = tf.Session()

saver = tf.train.import_meta_graph('/home/tyl/Code/Kprojects/cpython/Test/model/model.ckpt.meta')

saver.restore(sess, tf.train.latest_checkpoint('../model'))

print(type(sess.run('b:0')))

input_x = sess.graph.get_tensor_by_name('x:0')

input_y = sess.graph.get_tensor_by_name('y:0')

op = sess.graph.get_tensor_by_name('op_to_store:0')

add_on_op = tf.multiply(op,2)

ret = sess.run(add_on_op,{input_x:5,input_y:5})

print ret

sess.close()

return pic

這里要注意的是模型加載的路徑一定要正確。。。。

C++程序調用Python程序

這里,利用C++程序調用模型加載的Python程序

//readTF.cpp

#include

#include

#include

#include

int main()

{

const int flag= 1;

Py_Initialize();

if (!Py_IsInitialized())

{

return -1;

}

PyRun_SimpleString("import sys");

//路徑一定要對

PyRun_SimpleString("sys.path.append('/home/tyl/Code/Kprojects/cpython/Test')");

PyObject* pMod = NULL;

PyObject* pFunc = NULL;

PyObject* pParm = NULL;

PyObject* pRetVal = NULL;

int iRetVal=999;

PyObject* pName = PyString_FromString("classify");

pMod = PyImport_Import(pName);//獲取模塊

if (!pMod)

{

std::cout << pMod <<:endl>

return -1;

}

const char* funcName = "evaluate";

pFunc = PyObject_GetAttrString(pMod,funcName);//獲取函數

if (!pFunc)

{

std::cout << "pFunc error" <<:endl>

return -1;

}

pParm = PyTuple_New(1);//新建元組

PyTuple_SetItem(pParm, 0, Py_BuildValue("i",flag));//向Python模塊傳參

pRetVal = PyObject_CallObject(pFunc,pParm);//獲得返回結果

PyArg_Parse(pRetVal,"i",&iRetVal);//解析成C++需要的形式

std::cout<< iRetVal <<:endl>

return 0;

}

CMakeLists文件書寫

cmake_minimum_required(VERSION 2.6)

project(test)

set (CMAKE_BUILD_TYPE Debug)

set (CMAKE_CXX_FLAGS "-std=c++11")

include_directories( /usr/include/python2.7)

add_executable(readTF readTF.cpp)

target_link_libraries(readTF -lpython2.7)

結果

在KDevelop4上運行的結果

linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx

本文永久更新鏈接地址:https://www.linuxboy.net/Linux/2019-03/157201.htm

總結

以上是生活随笔為你收集整理的c语言调用tensorflow模型,C++调用Python中的Tensorflow模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。