国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++調(diào)用tensorflow教程

2020-01-26 13:38:30
字體:
供稿:網(wǎng)友

目前深度學(xué)習(xí)越來越火,學(xué)習(xí)、使用tensorflow的相關(guān)工作者也越來越多。但是目前絕大部分的python都是擁有著豐富的python的API,而c++的API不夠完善。這就導(dǎo)致絕大多是使用tensorflow的項目都是基于python。

如果項目是由c++編寫,想調(diào)用python下的tensorflow?可參考本教程(tensorflow模型是CNN卷積神經(jīng)網(wǎng)絡(luò))

具體步驟:

1.python環(huán)境

首先安裝python,可以在Anaconda官網(wǎng)直接下載。記住python一定選擇64bit,目前tensorflow不支持32位的python,這也是我之前被坑過的地方。下載Anaconda后直接

bash Anaconda3-4.3.1-Linux-x86_64.sh

就可以安裝,然后

gedit ~/.bashrc

在最后面加上

export PATH=/<你的anaconda路徑>/bin:$PATH

將python安裝路徑添加到系統(tǒng)路徑中,這樣在終端敲python后會運(yùn)行安裝的python3.6,如下圖所示,代表安裝成功:

2.tensorflow

直接終端輸入:

pip install tensorflow

就會自動幫你安裝到python下。
如果出現(xiàn)類似“沒有找到匹配版本”(或者紅色英文提示),那么你可能裝的是python32bit版本,暫時不支持tensorflow!
安裝成功后在終端如下操作:

顯示tensorflow版本,表示安裝成功!

3.C++Demo

一個簡單的c++調(diào)取python+tensorflow的demo,按照實(shí)際需要可以依葫蘆畫瓢。

#include <Python.h>#include <iostream>int main(int argc, char** argv){  char* picpath ="/home/pdd/PD/c++/c++python/pic/0.0.jpg";  Py_Initialize();     if ( !Py_IsInitialized() ) {     return -1;     }     PyRun_SimpleString("import sys");    PyRun_SimpleString("sys.path.append('./')");  PyObject* pMod = NULL;  PyObject* pFunc = NULL;  PyObject* pParm = NULL;  PyObject* pRetVal = NULL;  int iRetVal = -999;  char* modulName="classify";  //這個是被調(diào)用的py文件模塊名字  pMod = PyImport_ImportModule(modulName);   if(!pMod)  {    return -1;  }  char* funcName="evaluate"; //這是此py文件模塊中被調(diào)用的函數(shù)名字  pFunc = PyObject_GetAttrString(pMod, funcName);   if(!pFunc)   {      return -2;   }   pParm = PyTuple_New(1);  PyTuple_SetItem(pParm, 0, Py_BuildValue("s",picpath));//傳入的參數(shù),是圖片的路徑  pRetVal = PyEval_CallObject(pFunc, pParm);//這里開始執(zhí)行py腳本  PyArg_Parse(pRetVal, "i", &iRetVal);//py腳本返回值給iRetVal  //PyErr_Print();  std::cout<<iRetVal;  return iRetVal;}

4.tensorflow的python腳本

默認(rèn)你已經(jīng)寫好tensorflow的python腳本,并能跑成功。(tensorflow的使用不是本文重點(diǎn))
c++需要調(diào)用的就是這個classify.py里面的evaluate函數(shù),傳入圖片路徑,返回分類結(jié)果給c++程序。

from PIL import Imageimport numpy as npimport tensorflow as tfdef evaluate(pic):  image = Image.open(pic)  image = image.resize([256, 256])  image_array = np.array(image)  with tf.Graph().as_default():    里面就是對圖像讀取模型,預(yù)測,得到prediction……      max_index = np.argmax(prediction)      return max_index

5.c++調(diào)用python腳本的環(huán)境

這時候需要寫一個簡單的makefile加入需要的依賴環(huán)境。例如c++代碼第一行的Python.h和相關(guān)的庫文件。
簡單的makefile如下:

main:c++python.cpp  g++ -o out c++python.cpp -I/home/pdd/anaconda3/include/python3.6m -lpython3.6m -L /home/pdd/anaconda3/libclean:  rm -rf *.o 

-I后面的/home/pdd/anaconda3/include/python3.6m有需要的Python.h;-lpython3.6m鏈接到需要的libpython3.6m.so;-L指出鏈接的路徑。

終端輸入make。如果提示需要什么libpython3.6m..so,就把/home/pdd/anaconda3/lib下的libpython3.6m..so復(fù)制到/usr/lib/下(sudo cp ――

主站蜘蛛池模板: 大庆市| 宾川县| 永泰县| 黑河市| 华容县| 吉林市| 邵东县| 方城县| 精河县| 嘉兴市| 华容县| 台前县| 麻栗坡县| 富阳市| 衡山县| 颍上县| 龙井市| 宜州市| 景德镇市| 临猗县| 碌曲县| 永丰县| 都江堰市| 镇平县| 民权县| 墨脱县| 绍兴市| 彭泽县| 沅江市| 双峰县| 山东省| 贵德县| 新兴县| 秭归县| 林西县| 聂荣县| 永寿县| 秦安县| 武穴市| 剑川县| 喜德县|