vs2015编译tensorflow v1.5

tensorflow即将发布1.5版本,作为工业界应用最广的深度学习框架,它以其强大的泛用性和丰富的社区环境而广受好评。tensorflow1.5新性能。 

参考:https://blog.csdn.net/h8832077/article/details/78988488

但是tfboys/tfgirls在深入使用后都会遇到不同的问题,其中最常遇见的有: 
1. 如何在c++代码中使用tensorflow? 
2. 如何使用特定的CUDA版本编译tensorflow? 
3. 我已经训练好了一个模型,如何在windows环境下复用? 
这篇文章旨在解决1,2问题。3问题以后填坑。

准备工作

老规矩,首先是编译环境: 
OS: windows 10 
IDE: Vs 2015 
其次,需要准备的软件有: 
CMAKE:3.10.1 
SWIG:3.0.12(请下载预编译好的版本) 
CUDA:9.1 
CUDNN:7 
翻墙软件(没有也可以,但我没试过)

以上软件的安装方法请自行百度。对于不想自己编译的童鞋们。文章最末有下载链接,是我编译好的tensorflow1.5-release包(需要cuda9.1+cudnn7),其中包括lib和dll(c++),whl(python)

编译过程

  1. 获取代码 
    首先,到github的tensorflow项目中下载tensorflow代码(熟悉git的同学可以直接使用clone) 
    tensorflow页面
    获取代码以后,你会得到这样一个工程 
    这里写图片描述

  2. 预编译工程(此步骤熟悉cmake的同学可以直接命令行) 
    打开CMAKE软件,设置源代码路径为:tensorflow/contrib/cmake,需要编译的代码放到自己想要的位置,点击config,选择vs2015 win64原生编译工具。此时CMAKE会报错:

    Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)

    勾选tensorflwo_ENABLE_GPU(此项开启GPU支持),tensorflwo_BUILD_SHARED_LIB(此项使工程中添加tensorflow动态库工程),并设置CUDA和CUDNN版本。

    注意1:CUDA版本设置时9.1不需要写成91。 
    注意2:路径中不要包含中文

    上述步骤完毕,点击config,你将会得到一个这样的界面。 
    这里写图片描述 
    然后点击generate生成工程。 
    生成完的工程是这样的: 
    这里写图片描述

  3. 编译前的准备(如果漏掉某一步骤,可能出错) 
    1.在环境变量中加入

    PreferredToolArchitecture=x64

    2.你需要更改数据格式,找到re2\src\re2\re2\testing\search_test.cc和re2\src\re2\re2\testing\re2_test.cc文件,将其编码方式改为ANSI。 
    3.你需要先编译nsync\src\nsync\nsync.sln和protobuf\src\protobuf\protobuf.sln工程。具体方法为:使用vs2015打开相应sln工程后,选择目标平台(我选择了Release/x64),右键all_build项目,选择build。 
    4.打开翻墙工具(如果没有,请参照问题二处理方式)。打开cmd,输入ping google.com,如果成功,那么设置代理完成。

  4. 编译主工程

    在编译完的工作目录中找到tensorflow.sln工程,使用vs2015打开。 
    这里写图片描述
    可以看到一共250个项目,其中,最重要的两个项目分别是tensorflow和tf_python_build_pip_package。 
    找到tensorflow和tf_python_build_pip_package项目(或者直接选择ALL_BUILD,编译器会按顺序编译所有项目),选择目标平台后,右键build,等待1~2小时,项目就会成功编译好。 
    完成后,你在release中会发现: 
    这里写图片描述 
    在tf_python/dist中会发现: 
    这里写图片描述 
    注:whl文件使用方法:cmd输入pip install **.whl

编译中常见的问题

  • cmd.exe退出

    cmd.exe退出。 Faltal Error “compiler is out of heap space”

    请换成64位编译器,参见“编译前的准备/1.”

  • 常量中有换行符… search_test.cc/re2_test.cc 
    编码问题,参见“编译前的准备/2.”

  • 未找到nsyn.lib/protobuf.lib 
    参见“编译前的准备/3.”

  • unable to access https://boringssl.googlesource.com/boringssl 
    带google的网址国内用不了,需翻墙。参照“编译前的准备/4.

这里(密码:qwj6)是我预先编译好的DLL和whl,环境是vs2015/Release/x64+cuda9.1+cudnn7。

最后祝您身体健康,再见!

猜你喜欢

转载自blog.csdn.net/jacke121/article/details/80427283