Tensorflow001-汗水和眼泪已经分不清了之编译x86的Tensorflow源码 (build from source x86) C++ Window 10

怕热的我,有时候还真喜欢这个大家都怕冷都要把空掉关掉的密闭的办公室,因为这样子我就可以泪流满面,不是,是汗流满面才对。然后骂咧咧的说道:天啊,好热啊。

升级还是向下兼容?这是一个问题,就好像,改朝换代还是新朝当政,也是一个问题。在我看来向下兼容就是妥协。当需要向下兼容,更多是因为没人维修了,也不愿意跟上新的版本了,这样子不好,我还再敲30年代码啊!我不想去开菜鸟驿站。

这就引到了该文章的目的:
如何编一个x86(向下兼容)的tensorflow.lib,然后可以在X86(win32)的C++上使用。

清单1:心路历程
清单2:需要的工具
清单3:大致的步骤
清单4:很不错的博客
清单5:神奇的问题们

##########心路历程##########

公司前辈建议可以用:
在X86项目创建一个X64进程
X64进程调用X64或者X86的Tensorflow,然后交互。

在听到这个建议前我是看到了个这样子的帖子,过了一遍,然后没注意细节,大致方向为:
在Linux上编译出来你需要的Tensorflow
把1封装成C++可以用的库(丢脸,到现在“库”都没深刻理解,太多书单要看了)
然后C++在使用2.

这两个建议方向听着都很优雅!就像是办公室温度长期维持在20度的样子。但是这两个我都没经验,所以我仍然硬着头皮选择了,这个大家都在搜的词条:
VS2015编译Tensorflow,Build Tensorflow using VS2015
编译r1.8.0 Tensorflow,Build Tensorflow r1.8.0
编译32位Tensorflow, Build Tensorflow x86/32bits

今天呢总算是弄好了,满怀希望的抱着习武之人必带的游戏本回家把测试好的lib配置到项目的VS2010我才发现,VS2010没办法用,没办法用!我的天啊,没办法用。为什么?

因为最低可以编译的VS版本为2015,根本编不出来VS2010可以用的。不兼容性太多了。唉,今天风真大,在阳台看了一会容易阴晴残缺的农历十六的月亮的我,眼睛又太干涩了,眼眶又红了。明天又要去和前辈纠缠了。

关于版本工具的大概tensorflow有介绍 :Tensorflow 官方链接

值得一提的是这个官方非阳间攻略根本就没办法成功,各种奇怪的错误一大堆。我在Tensorflow的git repo的bug report下还看到一条信息:维护这个编译的人已经没了?没了?现在就全靠community维护了!

##########需要的工具##########

  1. CMAKE-GUI,版本越新越好,我用的是:3.15.0.rc1

  2. Visual Studio 2015 (VS2015)community version 社区版本 - x64

  3. Tensorflow Git Repo
    #git checkout r1.9.0

  4. Swig-win

  5. 翻越长城城墙的工具

##########大致的步骤##########

  1. CMAKE-GUI,选择source 和 destination
#Source
D:/tensorflow-root/tensorflow/tensorflow/contrib/cmake
#Destination
D:/tensorflow-root/tensorflow/tensorflow/contrib/cmake/build

CMAKE UI -1
会报错!因为没有指向 - SWIG_EXECUTABLE,选择你的swig.exe后,把tensorflow_BUILD_SHARED_LIB打勾,接着再次Configure。

(没想着配置GPU,所以不处理GPU,先确保这个CPU没问题了,下两周再来想GPU的办法吧)

CMAKE-UI2
2. 更新一些网络限制的lib

因为很多ZIP在CMAKE的过程中是无法下载的的!VPN用了都没办法,需要手动下载并且放置于:

E:\tensorflow-root-path\tensorflow\contrib\cmake\build\downloads

下完后还需要去修改对应的cmake文件,因为它会检查然后删除掉,图一个省心省力省时,我直接把对应的cmake全部清空了,当然也做了一个备份。

下面的百度云可以下载到需要的ZIP,已经配置好的cmake-download文件。

链接:https://pan.baidu.com/s/144UF8Vq4zUlzXY-AsSocNw
提取码:skea
  1. 编译

用VS2015打开build下面的tensorflow.sln,编译。

然后等结果,好啦。

好了?当然是好了。

。。。。
。。。
。。


才怪,奇奇怪怪乱七八糟的神经神奇的问题一大堆,我这里就说一下我碰到的,每个人可能不同。下面这些很不错的博客也略多略少的介绍了碰到的问题。

##########很不错的博客##########

在提到这些问题们,就不得不提一下参考的博客的帖子们。排名不分先后,只是按照收藏的顺序。

1号 - win10 编译tensorflow1.8和tensorflow1.9生成64位和32位的dll(都是cpu)

这里提到了一个重点:32位的时候,tensorflow branch需要低版本才可以的!我如果早点搜索,而不是想着把以前r.1.13.0编译成32位的就好了。。。。作者提到了r1.9.0才可以使用32位!感谢。

也提供一个很不错的debug方式,去找对应的小模块单独编译。

2号 - 【软件安装】WIN10 + Tensorflow1.12 C++接口 + Cmake编译失败 + Bazel编译成功 + C++接口

这个作者提到了几个问题的解决方法:

问题1
tensorflow-master\tensorflow\core\kernels\unicode_ops.cc(65): error C2440: “初始化”: 无法从“const UChar *”转换为“const char16_t *”
解决方法:强制转换类型,const char16_t* buf = (char16_t*)in.getBuffer();
问题2:
tensorflow-master\tensorflow\cc\gradients\nn_grad.cc
报错:auto squeeze_result = Squeeze(scope, matmul_result, Squeeze::Axis(axis));
解决方法:auto squeeze_result = Squeeze(scope, matmul_result, Squeeze::SqueezeDims(axis));

但是这个博客使用的是tensorflow r1.12.0和r1.13.0的,和实际的使用情况也不同,不过还是很推荐看一遍的。

3号 - win10 + bazel-0.20.0 + tensorflow-1.13.1 编译tensorflow GPU版本的C++库

如果你需要GPU版本的话,可以参考一下3号

4号 - 【Tensorflow】Windows以cmake+visual studio方式编译cpu版tensorflow.dll和tensorflow.lib

作者很细心的罗列出来了编译完后的文件夹路径和内容,要不是因为这个帖子,我还以为bazel-build出来的结果和CMAKE build出来的结果是一致!!还一直对应不起来C++所需要的文件路径。

##########神奇的问题##########

神奇的问题真的很多,可以翻墙的话,谷歌搜,可以找到很多在tensorflow git repo下官方的回答。不行的话,bing国际版,也可以找到很多stack-overflow的回答!百度也是不错,CSDN就很赞。

libFuzzer 问题:

Cloning into 'third_party/libFuzzer'...
fatal: unable to access 'https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer/': Failed to connect to chromium.googlesource.com port 443: Connection timed out
fatal: clone of 'https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer' into submodule path 'third_party/libFuzzer' failed
Failed to recurse into submodule path 'cmake/external/grpc/third_party/bloaty'
Failed to recurse into submodule path 'cmake/external/grpc'

下载Fuzzer,然后替换到指定的路径下。

链接:https://pan.baidu.com/s/1_ZDnupYo74UF-yKQIohr-Q 
提取码:j6hw

########################
有其他问题的话,站内私信回复可能较慢,需要的话也可以关注一波公众号里面可以提问,公众号如下:

李先生苏女士和小馒头的生活记录
编译好的链接:
链接:https://pan.baidu.com/s/1yQkWe0lUKKbDJivdda5BwQ
提取码公众输入20200903既有。

周末再写一些如何把使用C++调用训练好的模型,以及.model, .h5和.pb的转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值