Linux16.04配置tensorflow(GPU源码编译)并深入了解tensorboard

1 篇文章 0 订阅
1 篇文章 0 订阅

Tensorflow – Google推出的一个强大的“深度学习框架”。于2015年11月在GIthub上开源,在2016年4月补充了分布式版本,并于2017年1月发布了1.0版本的预览,API接口趋于稳定。目前Tensorflow仍处于快速开发迭代过程中,有大量新功能及性能优化在持续研发中。Google开源Tensorflow的原因有:第一时希望通过社区的力量,让大一起完善Tensorflow。现在看来,它已经达到了这个目的。作为一个最受热捧的深度学框架,他已经吸引了众多的爱好者和开发者。第二是回馈社区,Google希望让这个优秀的工具得到更多的应用,从整体上提高学术界乃至工业界使用深度学习的效率。除了Tensorflow,Google还开源过大量的项目,包括移动操作系统Android、浏览器Chromium、编程语言Go、JavaScript引擎V8、数据交换框架Protobuf、编译工具Bazel、OCR工具Tesseract等众多项目。

Tensorflow 既是一个实现机器学习算法的接口,同时也是执行机器学习算法的框架。它前端支持Python、C++、Go、Java等多种开发语言,后端使用C++、CUDA等写成。Tensorflow实现的算法可以在众多异构的系统上方方便地移植,比如Andriod手机、iphone、普通的cpu服务器、乃至大规模GPU集群。除了执行深度学习算法,Tensorflow还可以用来实现很多其他的算法,包括线性回归、逻辑回归、随机森林等。Tensorflow建立的大规模深度学习模型的应用场景也非常的广泛,包括“语音识别”“自然语言处理(NLP)”“计算机视觉(CV)”“机器人控制”“信息抽取”“药物研发”“分子活动预测”等,使用Tensorflow开发的模型也在这些领域获得了最前沿的成果。

Tensorflow由一个重要的组件client,即客户端,它通过Session的接口与master及多个worker相连。其中一个worker可以与多个硬件设备相连,比如CPU或GPU,并负责管理这些硬件。而master则负责指导所有worker按流程执行计算图。Tensorflow有单机模式和分布式模式两种实现,其中单机指client、master、worker全部在一台机器上的同一进程中;分布式的版本允许client、master、worker在不同机器的不同进程中,同时由集群调度系统统一管理各项任务。

Tensorflow中的一个非常有用的工具是Tensorboard。Tensorboard时Tensorflow的一组Web应用,用来监控Tensorflow的运行过程,或进行可视化。Tensorboard目前支持5种可视化:标量(scalars)、图片(images)、音频(audio)、直方图(histogram)和计算图(Computation Graph)。Tensorboard的Events Dashboard可以用来持续地监控运行的关键指标,比如loss,accuracy,学习速率(lr)等众多你需要观察的变量。Image Dashboard则可以展示训练过程中用户设定保存的图片,比如某个训练中间结果用Matplotlib等绘制出来的图片;Graph Explore则可以完全展示一个TensorFlow的计算图,并且支持缩放拖拽和查看节点属性。下面是Tensorborad的一些视图。

初级面板
初级面板

Embedding结果显示
Embedding显示

T-SNE
T-SNE

好了,下面开始“源码编译Tensorflow”
1. 首先你需要安装CUDA和Cudnn,请查看我前面的Blog;

2. 获得Tensorflow源码;
git clone https://github.com/tensorflow/tensorflow​
3. 解压到指定的文件夹下:
tar -zxvf xxx
4. 进入解压后的Tensorflow主文件加下:
cd xxx/tensorflow
5. 运行configure文件
./configure
1) 定位python的安装路径,你可以使用默认路径,输入“y”即可;当然你也可以指定Python的路径;
2) 是否支持GPU,由于我们安装的是GPU版本,需要支持GPU,即输入“y”;
3) 是否支持CUDA,由于我们之前成功安装过CUDA,输入“y”;
4) 确定gcc的版本,它会自动搜索当前Linux下的gcc,建议选择“默认”即可,当然如果你的Linux安装了多个gcc,你也可以指定具体的路径和版本;
5)确定CUDA的版本,由于我们安装的是CUDA8.0,即输入“8.0”即可,这个需要你根据自己的CUDA版本进行选择;
6)定位CUDA的路径,建议选择“默认”,如果你发现默认的路径有问题,你可以设置自己的路径,如/usr/local/xxx;
7) 确定Cudnn的版本,这个必须与Cuda对应,由于我们之前安装的是v5.1版本的,输入“5.1”或者选择“默认”;
8)定位Cudnn的路径,建议选择“默认”或者指定安装的路径;
9)选择GPU的计算能力,因为不同类型的GPU具有不同的计算能力,你需要根据你当前的GPU的类型查看它所对应的计算能力。这个需要你有一些GPU的基础知识。
10)到此,configure完成。

注:
1)这个过程需要很长的时间,需要你耐心等待。
2)配置过程与下图类似,可能会有一些不同,但是基本一致。

configure

6. 安装bazel -- 谷歌开发的一个编译器
1)下载一些依赖包
sudo apt-get install python-numpy swig python-dev python-wheel​​
7. 建立GPU支持
1)bazel build --copt=-march=native -c opt --config=cuda //tensorflow/tools/pip_package.build_pip_package
2) bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
3) sudo pip install /tmp/tensorflow/tensorflow-1.0.0rc0-cp27-cp27m-linux_x86_64.whl

注:这里我使用的是python2.7版本。如果你是其他版本,你需要做出一些修改。
8. 测试
​bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu​
此程序会计算一个2*2矩阵的主特征值 输出如下图所示:

输出结果

其实,Tensorflow支持多种安装方式,你可以进行灵活的选择,以下我简单的介绍一下。
1. pip安装
这是最简单的一种方式,但是通常会在编译代码的过程中出现一些莫名其妙的错误,这种方式适合新手。
1) pip install tensorflow       # python2.7 cpu版本
2) pip3 install tensorflow      # python3.x cpu版本
3) pip install tensorflow-gpu   # python2.7 gpu版本
4) pip3 install tensorflow-pu   # python3.x gpu版本
2. Docker安装
3. Anaconda安装
4. virtualenv安装

注:如果你想要采用其他的安装方式,你可以点击以下的连接,去tensorflow官网查看详细的安装过程,选择一种你喜欢的方式进行安装。总之,tensorflow官网提供的很详细,远远超越了其它的深度学习框架。tensorflow各种安装方式链接

好了,tensorflow的安装到此结束,下面让我们来说下tensorboard吧!
我在许多tensorflow的群里面看到大家对tensorboard的使用提出了很多的问题,很有必要在这里给大家说明一下。
tensorboard -- 一个必备的可视化工具,只要你使用过,你就会深深的喜欢上它。
1. 首先,让我们来看看如何打开它吧。你需要在Linux命令行下面输入以下命令:
tensorboard --logdir=xxx
2. 打开浏览器,在网址处输入以下内容:
localhost:6006 或者 http://localhost:6006
注:
1--logdir用来指定需要可视化结果的具体路径,这个参数是必须指定的。
2)在许多的tensorflow代码中通常会利用FLAG标志来指定这个logdir,相信聪明的你已经发现啦。
3)这个我随便打开了一个logdir路径,命令行中显示的结果如下图所示:
4)tensorboard是在本地的浏览器上面运行,因此需要你打开浏览器,并指定localhost(当前主机host),聪明的你可能已经注意到了命令行中已经弹出来了这个指示啦。打开后的界面如下图所示:

命令行中打开tensorboard
命令行中打开

tensorboard登录后的原始界面
登录后的原始界面

2. 通过上面你已经知道如何在Linux下打开tensorboard,但是如何在Windows下打开tensorborad呢,这是许多人询问的一个问题,我的解决方案如下所示,大家可以想一下,Linux的命令行执行的都是shell脚本,那么在Windows下面的类shell的东西是什么呢?对啦,就是它--cmd,具体内容请看下面。
1)点击右下角的开始按钮,输入cmd,点击“Enter”,会弹出如下的界面:
2)在“360浏览器”或者“谷歌浏览器”中输入以下内容:
localhost:6006 或者 http://localhost:6006

注:
1)显示的结果如下图所示。
2)当然你可以在任意的浏览器上打开它,我这里仅仅测试啦360和Google浏览器。
3)是不是有些恍然大悟的感觉!

cmd中输入:tensorboard –logdir=D:/XXX显示结果(切换路径)
cmd

cmd中输入:tensorboard –logdir=D:/XXX显示结果(未切换路径)
cmd

利用360浏览器打开的tensorboard界面
360

利用Google浏览器打开的tensorboard界面
google

3. 好了,现在你会在Linux和Windows下面打开tensorboard啦,我们来展示一些结果吧!

注:以下我会显示不同部分的一些结果样例。包括“scalars” “images” “histogram” “distribution”等。

scalars中显示的loss结果:
scalars

graph中显示的结果:
Graph

histogram中显示某幅图片结果:
显示某幅图片

T-SNE中显示的结果:
tsne

image中显示的结果:
image

4. 下面我将会教你在代码中如何添加可视化
1) 首先,你需要知道以下的内容:
tf.summary.scalar('命名', 需要可视化的张量)
如:tf.summary.scalar('accuarcy', accuarcy)
表示可视化accuray张量,并命名为accuarcy,它会保留每次迭代的结果,绘制出一个曲线图。

tf.summary.image('命名', 需要可视化的张量)
如:tf.summary.image('input', image_shaped_input, 10)
表示可视化输入的图片(image_shaped_input),并命名为input,并设置显示的大小。

tf.summary.histogram('命名', 需要可视化的张量)
如:tf.summary.histogram('histogram', var)
表示可视化var变量,并命名为histogram,如histogram中显示的weights结果所示。
当然你也可以可视化audio,方法相同,如果你感兴趣,请自己尝试。
2)那么如何在代码中添加他们呢?
首先你需要知道想要可视化哪些变量,并且确定需要可视化哪种类型的变量,
通常使用tf.summary.scalar来可视化“标量数据”;
使用tf.summary.histogram来可视化“变量数据”;
使用tf.summary.image来可视化“输入、输出或者中间层产生的图像”;
使用tf.summary.audio用来可视化“语音”;
只要你在代码中保存了checkpoint和meta文件,就可以就行可视化distribution和grapha啦。
3)使用代码案例如下所示:
with tf.name_scope('summary'):  # 设置一个命名空间
    tf.summary.image('input', image, 10)
    tf.summary.scalar('max', value)
    tf.histogram('histogram', var)

merge = tf.summary.merge_all()  # 合并所有的summary操作
writer = tf.summary.FileWriter(log_dir, sess.grap) # 将summary写到某个路径下

write.add_summary(summary)      # 添加其他的summary
write.close()                   # 关闭summary

tensorboard --log_dir=xxx       # 查看可视化的结果

注:
1)以上我只是简单的介绍了一个案例,大概的流程是这样,你需要结合自己的工程去灵活的改变它们。这需要在实践中进行积累。
2)一个很好的学习案例就是tensorflow官网提供的文件,具体的路径如下所示:tensorflow-master/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py
我会提供给大家一个下载链接:

文件下载链接

这篇Blog应该结束啦。Tensorflow很全也很大,需要你长时间的去了解学习它,慢慢的解开它的神秘面纱,而且它已经应用到了手机上面,这是其他的深度框架远远不能及的。

注:
1)由于个人能力有限,难免会有有些错误,希望大家能够谅解;
2)关于本博客,如果你有任何问题都可以向我提问,我会及时的回复大家。
3)由于本博客是我的原创,如果想要转载,希望你联系我,我会及时的回复。
邮箱:1575262785@qq.com
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值