Tensorflow c++实践(使用cmake vs2015 编译tensorflow源码)

写这篇文章的主要目的是为了总结这一个多月对tensorflow应用到c++语言上面走过的路。因为身边的人都少有使用c++实现tensorflow的使用,都是自己一点坑一点坑踩过来。所以想总结一番,也分享给大家一起探讨。第一次写,写的不好的地方请大家多多指正。我是在Github下载tensorflow源码,编译可以供vs2015使用的tensorflow库,然后将我们项目training得到的.ckpt文件固定成.pb文件,经过c++调用,跑出了想要做到的效果。这里介绍的是如何编译供c++使用的tensorflow库,并且是GPU版本

tensorflow c++源码编译

参考的博客链接:https://www.cnblogs.com/steven_oyj/p/8259205.html (请复制粘贴,_ 原因会出现404)我就差不多是参考上面这篇博客的,并对其进行完善一下,主要是在cmake-gui勾选参数就有点区别,还有我没有像上述博客一样,修改CMakeLists.txt的内容, 非常感谢这位博主。

相关的环境准备

  1. 操作系统 win10
  2. 编译工具 visual studio 2015 (我用的是企业版的,版本是随意的)
  3. 安装swig-3.0.12 我的安装路径是 E:/download/swigwin-3.0.12/swigwin-3.0.12/ (可以的话还是下这个版本的)
  4. 安装python3.5 将安装路径添加到环境变量中,我是用Anaconda安装的
  5. 安装cmake-gui,版本是Cmake-3.8.0
  6. 安装git,将git路径加入环境变量,vs编译过程中会使用git
  7. 从github中tensorflow 的master上下载源码

这是我存放下载下来tensorflow-master源码的路径

这里有一点要提的是,我这个tensorflow-master版本想要使用GPU的话,对应的是Cuda v9.0版本。事先安装好Cuda V9.0,并在vs2015中去试着调用,看是否可以使用。这里给一下使用vs + cuda的配置方法,主要是测试vs2015能否使用gpu。安装CUDA时候,注意也要弄好Cudnn, 装过tensorflow-gpu版本的应该都知道,就不说了。 参考链接:https://blog.csdn.net/u013165921/article/details/77891913

使用Cmake-gui 设置编译参数

这个当时真的打击到我了,cmake出来一堆东西,还需要去用VS来编译,编译一次需要4-5个小时,才可以知道在这些编译参数下生成的文件再用vs来编译能不能成功。失败了一个多星期,然后总算找到了可以成功编译的cmake参数了。具体的参数含义建议大家看看tensorflow的官网介绍,由于是赶着工程需要,也没有去深入研究这些cmake参数的定义,以及勾选不同参数下vs编译时候报的错误信息。cmake注意安装的不是命令行cmake,而是cmake-gui,方便在cmake时候勾选自己所需要的参数。下面就给出了cmake-gui操作的具体流程图了。

1. 是源码的cmake文件夹路径 2. 是生成文件存放的路径 3. 勾选 4. 点击Configure
上一张图点击Configure之后会弹出如下界面。选择如上设置再Configure
这时候会报错,是因为没有找到swig.exe ,编辑下面的红线部分,参考:E:/download/swigwin-3.0.12/swigwin-3.0.12/swig.exe 然后再Configure
最重要的部分来了,这时候点击tensorflow下拉出一系列参数,具体的勾选如上图所示。之前我就是再勾选参数这里反反复复,最终上面这个是我编译成功的参数设置。然后点击Configure,Configure Done之后点击Generate

这时候,在你的生成文件路径E:\download\tensorflow-master\tensorflow-master\tensorflow\contrib\cmake\w_build下就会生成一堆文件,然后使用vs2015打开下面工程文件:双击ALL_BUILD, 使用vs2015打开。

如下图,选择Release x64 , 然后按照下图所标示 1点击 工具 2选择 选项 3 设置最大并行项目生成数为 1。上述设置完成之后,就可以右击ALL_BUILD ->生成。 接着就是漫长的等待了。我的电脑一般是4个小时左右。

编译完成之后,一般都会报错的。也别着急,需要耐心。我的错误类型如下:

然后找到下图的文件 tf_core_kernels 鼠标右键->仅用于项目->仅生成tf_core_kernels,然后再等一段时间,就可以看到下面第二张图的输出结果了。

接着找到tensorflow_static文件,鼠标右键->仅用于项目->仅生成tensorflow_static, 再等一段不长的时间

最后一步了,你上面都是出现成功的话,这一步就是更没问题了。找到tensorflow这个文件, 鼠标右键->仅用于项目->仅生成tensorflow,就会在相应的目录下生成tensorflow.dlltensorflow.lib, 这就是我们需要的文件了。然后c++编译tensorflow就算是成功了。一般的你可以去找个关于c++ tensorflow教程跑一下这个tensorflow源码中的example, 测试一下。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

c++ tensorflow

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏redis集群

redis集群的高可用性实现

当主从的redis性能和容量满足不了项目的需求时,一般会采用集群方案。而原生的集群方案是一个比较好的选择。本文主要是讨论如何保证集群版高可用。高...

2734
来自专栏云计算教程系列

如何在Ubuntu 14.04上设置R.

R是一种流行的开源编程语言,专门用于统计计算和图形。它被统计学家广泛用于开发统计软件和执行数据分析。R的优势之一是允许用户创作和提交自己的包,因此它具有高度且易...

520
来自专栏黑白安全

Github寻找敏感信息

0x01 引子 先给不知道什么是Github的朋友们科普一下什么是Github Github是一个分布式的版本控制系统,目前拥有140多万开发者用户。随着越...

763
来自专栏FreeBuf

Linux内核中的递归漏洞利用

6月1号,我提交了一个linux内核中的任意递归漏洞。如果安装Ubuntu系统时选择了home目录加密的话,该漏洞即可由本地用户触发。如果想了解漏洞利用代码和短...

2636
来自专栏匠心独运的博客

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-...

1732
来自专栏马涛涛的专栏

Cookie与Session、LocalStorage与Sessionstorage 对比

SessionStorage 在用户关闭页面(准确的来说是会话(Session)结束)后就失效。其余的和localstorage一样

1032
来自专栏梦里茶室

【Chromium中文文档】进程模型

这个文档描述了Chromium支持的不同线程模型,包括它的渲染器进程,以及现有模型实现的问题。 概述 网页内容已经发展到包含大量在浏览器内运行的活跃代码的地步,...

23610
来自专栏玄魂工作室

利用Png做持久型XSS攻击

关于文件上传漏洞,其实是老生常谈了,其实很多网站都做了很严格的控制。这里我们不去谈如何突破文件上传,而是假设我们能上传一张图片,然后当成html嵌入或者执行。 ...

1372
来自专栏Python爬虫与数据挖掘

手把手教你进行R语言的安装及安装过程中相关问题解决方案

这篇文章旨在为R语言的新手铺砖引路,行文相对基础,希望对在R语言安装上有问题的小伙伴提供帮助和指引。

1344
来自专栏软件开发 -- 分享 互助 成长

抽象工厂模式

一、相关介绍 1、抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。 2、UML图 ? 3、所属类别:创建型 二、C++程序 ...

1849

扫码关注云+社区