python 调用 tensorflow_C++调用tensorflow教程

目前深度学习越来越火,学习、使用tensorflow的相关工作者也越来越多。但是目前绝大部分的python都是拥有着丰富的python的API,而c++的API不够完善。这就导致绝大多是使用tensorflow的项目都是基于python。

如果项目是由c++编写,想调用python下的tensorflow?可参考本教程(tensorflow模型是CNN卷积神经网络)

具体步骤:

1.python环境

首先安装python,可以在Anaconda官网直接下载。记住python一定选择64bit,目前tensorflow不支持32位的python,这也是我之前被坑过的地方。下载Anaconda后直接

bash Anaconda3-4.3.1-Linux-x86_64.sh

就可以安装,然后

gedit ~/.bashrc

在最后面加上

export PATH=//bin:$PATH

将python安装路径添加到系统路径中,这样在终端敲python后会运行安装的python3.6,如下图所示,代表安装成功:

2.tensorflow

直接终端输入:

pip install tensorflow

就会自动帮你安装到python下。

如果出现类似“没有找到匹配版本”(或者红色英文提示),那么你可能装的是python32bit版本,暂时不支持tensorflow!

安装成功后在终端如下操作:

显示tensorflow版本,表示安装成功!

3.C++Demo

一个简单的c++调取python+tensorflow的demo,按照实际需要可以依葫芦画瓢。

#include

#include

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"; //这个是被调用的py文件模块名字

pMod = PyImport_ImportModule(modulName);

if(!pMod)

{

return -1;

}

char* funcName="evaluate"; //这是此py文件模块中被调用的函数名字

pFunc = PyObject_GetAttrString(pMod, funcName);

if(!pFunc)

{

return -2;

}

pParm = PyTuple_New(1);

PyTuple_SetItem(pParm, 0, Py_BuildValue("s",picpath));//传入的参数,是图片的路径

pRetVal = PyEval_CallObject(pFunc, pParm);//这里开始执行py脚本

PyArg_Parse(pRetVal, "i", &iRetVal);//py脚本返回值给iRetVal

//PyErr_Print();

std::cout<

return iRetVal;

}

4.tensorflow的python脚本

默认你已经写好tensorflow的python脚本,并能跑成功。(tensorflow的使用不是本文重点)

c++需要调用的就是这个classify.py里面的evaluate函数,传入图片路径,返回分类结果给c++程序。

from PIL import Image

import numpy as np

import tensorflow as tf

def evaluate(pic):

image = Image.open(pic)

image = image.resize([256, 256])

image_array = np.array(image)

with tf.Graph().as_default():

里面就是对图像读取模型,预测,得到prediction……

max_index = np.argmax(prediction)

return max_index

5.c++调用python脚本的环境

这时候需要写一个简单的makefile加入需要的依赖环境。例如c++代码第一行的Python.h和相关的库文件。

简单的makefile如下:

main:c++python.cpp

g++ -o out c++python.cpp -I/home/pdd/anaconda3/include/python3.6m -lpython3.6m -L /home/pdd/anaconda3/lib

clean:

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复制到/usr/lib/下(sudo cp ——–)

此时再次输入make,一切ok!得到out文件,输入./out,结果如下:

得到结果0。任务完成!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: _pywrap_tensorflow_internal是TensorFlow的内部Python包,包含了TensorFlow的内部实现和底层代码。它主要用于TensorFlow的开发和调试,一般用户不需要直接使用该包。 ### 回答2: _pywrap_tensorflow_internal是一个C++封装了TensorFlow的功能的模块。TensorFlow是一个用于机器学习和深度学习的开源框架,而_pywrap_tensorflow_internal模块是TensorFlow内部使用的一个C++模块,用于提供对TensorFlow核心功能的高级封装。 _pywrap_tensorflow_internal模块提供了一些包装类和函数,可以方便地在C++代码中调用TensorFlow的功能。这样,开发者可以使用C++语言来更高效地利用TensorFlow的各种功能,在底层实现更复杂的机器学习模型和算法。 该模块包含了一些重要功能的封装,如张量操作、计算图的搭建和执行、模型的保存和加载等。这些功能可以方便地通过Python的API进行调用,但在底层实现时,使用了C++来提高执行效率。 在TensorFlow的源代码中,_pywrap_tensorflow_internal模块是由C++编写的,它提供了底层的功能实现,为TensorFlow提供了高性能和灵活性。通过对_pywrap_tensorflow_internal的使用,可以更好地理解TensorFlow的内部实现,并为开发者提供更多自定义机会。 总而言之,_pywrap_tensorflow_internal是一个C++封装了TensorFlow核心功能的模块,提供了高效且灵活的机器学习和深度学习编程环境。它在TensorFlow中扮演着重要的角色,为开发者提供了更多底层的功能和自定义机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值