汐月教育之理解TensorFlow(一)安装配置与基本使用

来源:互联网 发布:大数据主要来源于机 编辑:程序博客网 时间:2024/05/03 08:55

作者:JUDGE_MENT
邮箱:gao19920804@126.com
CSDN博客:http://blog.csdn.net/sinat_23137713
最后编辑时间:2016.12.5  V1.1
声明:
1)该资料结合官方文档及网上大牛的博客进行撰写,如有参考会在最后列出引用列表。
2)本文仅供学术交流,非商用。如果不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)转载请注明出处。
4)本文主要是用来记录本人初学Tensorflow时遇到的问题,特此记录下来,因此并不是所有的方法(如安装方法)都会全面介绍。希望后人看到可以引以为鉴,避免走弯路。同时毕竟水平有限,希望有饱含学识之士看到其中的问题之后,可以悉心指出,本人感激不尽。


一. 安装和卸载(TensorFlow有5种安装方法之多,本文只介绍pip安装)


a.  pip安装tensorflow

注意pip安装Tensorflow目前只能安装到64位系统之下,不支持32位。Pip是Python下的一个包管理和安装软件(与easy_install齐名)

本文首先尝试在虚拟机中Ubuntu16.4, 64位,CPU模式,Python 2.7之下安装. Python2.7在16.4下已经自带. 

i. 安装pip

$ sudo apt-get install python-pip python-dev      # Ubuntu/Linux 64-bit

ii. 设置下载地址变量,别的OS下是别的网址,可以自己去git上看.

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl

iii. 安装tensorflow

sudo pip install --upgrade $TF_BINARY_URL
注意,注意,这里你很可能连不上网,有坑 . 毕竟要从google下载,所以你可能需要科学上网才能继续下载咯。


b.  pip卸载tensorflow

$ sudo pip uninstall tensorflow


c.  anaconda中使用pip安装tensorflow

i. 新建conda环境(意思似乎就是说不安装到anaconda2/lib/python2.7目录下,自己给这么庞大的程序单独安装到一个文件夹:envs/tensorflow)

注意anaconda2/envs文件夹没有权限,如果直接安装,不会撞到usr/local/anaconda2/envs,而是安装到home/wayne/.conda/envs文件夹,所以我们要先获取文件夹的超级权限。

sudo chmod 777 -R /usr/local/anaconda2conda create -n tensorflow Python=2.7

ii. 激活tensorflow环境,并安装

source activate tensorflowexport TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp27-none-linux_x86_64.whlsudo pip install --ignore-installed --upgrade $TF_BINARY_URL

iii. 退出tensorflow环境,完成安装 (以后每次使用tensorflow之前都需要激活一下tensorflow环境)

source deactivate tensorflow

注意:不知道为什么我好像新建envs环境之后,经常无法安装tensorflow到envs里,反倒是安装到usr/local/lib之后再copy一份到anaconda比较方便。

二. 安装位置

1. 普通pip安装位置

/usr/local/lib/python2.7/dist-packages/tensorflow/usr/local/lib/python2.7/site-packages/tensorflow

2. anaconda下安装位置

/usr/local/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow

3. 目录结构


按照上一节的pip安装方法后,tensorflow整个库包被安装到了目录下;在上图中,左边为安装后位置的文件夹,右边的是从github上下载的源码包。发现配置过程中删除了部分文件(examples下的部分文件不翼而飞了)(原来源代码中还有一个model文件夹,其实和examples都是例子,在1.0.0之后models文件夹也去除了),如果想看某些例子文件,可以去源代码中examples文件夹下去看。

Example:用来存放网络教程中讲的源代码。

Model:储存目前TF上完善的模型的代码。包括embedding(词向量)、image(图像)、rnn(循环神经网络)这些代码。都是可以直接运行的。

这是针对0.8.0版本说的,现在models文件夹已经没有


三. 运行短代码,查看是否安装成功

1. 启动python

$ python
2. 输入代码
>>> import tensorflow as tf>>> hello = tf.constant('Hello, TensorFlow!')>>> sess = tf.Session()>>> print(sess.run(hello))
3. 输出结果
Hello, TensorFlow!

四. 配置GPU下安装TF

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"

export CUDA_HOME=/usr/local/cuda
这两个是开启GPU加速的关键,在import tensorflow之前一定要运行.


因此这两个东西可以放到环境变量文件中(开机之后默认运行),对于控制台可以放入./.bashrc文件中,对于pycharm应该要放入pycharm文件夹/bin/pycharm.sh文件中。
因为pycharm执行环境和.bashrc文件独立的
在.bashrc中添加:
 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
 export CUDA_HOME=/usr/local/cuda
在/bin/pycharm.sh中添加:
LD_LIBRARY_PATH='/usr/local/cuda/lib64' 
LD_LIBRARY_PATH='$LD_LIBRARY_PATH:LD_LIBRARY_PATH/usr/local/cuda/extras/CUPTI/lib64'


参考博客: http://blog.csdn.net/slade_ruan/article/details/53022768

http://blog.csdn.net/wo334499/article/details/52238986






小试牛刀 (tensorflow更新太快了,下面可能要废弃了)


a. 小试是否安装成功,打开terminal

$ python>>> import tensorflow as tf>>> hello = tf.constant('Hello, TensorFlow!')>>> sess = tf.Session()>>> print(sess.run(hello))Hello, TensorFlow!>>> a = tf.constant(10)>>> b = tf.constant(32)>>> print(sess.run(a + b))42

b. 小试demo之MNIST的识别

一般pip自动安装tensorflow到ubuntu的默认python路径下面。默认情况下,路径是: 
/usr/local/lib/python2.7/dist-packages/tensorflow/usr/local/lib/python2.7/site-packages/tensorflow

要执行的MNIST识别例子的文件在models/image/mnist/convolutional.py路径下. 运行如下代码进行自动训练 

# 使用 'python -m' 可以自动在你的python路径下寻找该文件(可见路径由"."进行连接)$ python -m tensorflow.models.image.mnist.convolutionalExtracting data/train-images-idx3-ubyte.gzExtracting data/train-labels-idx1-ubyte.gzExtracting data/t10k-images-idx3-ubyte.gzExtracting data/t10k-labels-idx1-ubyte.gz...etc...
# 也可以不用-m,直接传递路径,如下:$ python /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/convolutional.py...

就是这样,然后MNIST训练最终得到了如下的结果:

经过8500次的迭代,训练准确率达到99.2%


c. 稍微复杂一点的例子

先构件图,然后运行图。

1. 构件图:构建源op(常量op) --> 在default graph中使用op构造器-->制作自己的图。

$ python      #进入python import tensorflow as tf# 创建一个常量节点加到默认图中.matrix1 = tf.constant([[3., 3.]])# 创建另外一个常量 op, 产生一个 2x1 矩阵.matrix2 = tf.constant([[2.],[2.]])# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.# 返回值 'product' 代表矩阵乘法的结果.product = tf.matmul(matrix1, matrix2)
2. 运行图:创建会话“session”+启动图 --> 执行

# 建立会话session,启动默认图.sess = tf.Session()# 调用会话sess 的 'run()' 方法来执行# 传入 'product' 作为参数,'product' 代表了之前构件图的输出, 传入它是向方法表明, 我们希望取回矩阵乘法 op 的输出.## 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的. # 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.## 返回值 'result' 是一个 numpy `ndarray` 对象. 如果在C/C++中,则返回tensorflow::Tensor 实例result = sess.run(product)print result# ==> [[ 12.]]# 任务完成, 关闭会话.sess.close()
close是一定要close的,还有一种方法是使用with来自动调用close,如下:

with tf.Session() as sess:result = sess.run([product])print result

使用GPU,TensorFlow自动检测,尽量使用GPU。但当有两块显卡的时候,需要代码中分配GPU。


四. 理解

TensorFlow中最重要的是“图”的概念,用来表示Tensor的流动。在“图”中的节点称为“op”。

会话“session”是一个平台,在“图”的概念之上,图在会话之中运行。

Python的效率较低,因此矩阵运算都是利用Python执行C++代码这样的方式,但是会导致切换时效率很低,因此有了“图”的方式,一次性的在python外运行,避免来回切换。这种高级语言和超高级语言的有效结合很棒,人类接触超高级语言-"简单",机器接触高级语言-"快速"。


五. 交互式使用

上面的方法是写出来然后运行,还可以交互式运行,发生以下变化:

a. tf.Session ---> tf.InteractiveSession 

b. run ---> initalize.run   &&    eval() 


六. 使用变量、feed

tf.constant tf.variable 这是Tensorflow中的常量和变量;同时Tensorflow还提供一种占位符,也就是一种空的Tensor,在程序中可以先用这个占位符代替具体的数据进行运算,然后在sess.run的时候再提供这个占位符具体的值。



参考文档

中文: http://www.open-open.com/lib/view/open1447242339210.html
英文: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md





1 0
原创粉丝点击