一. 安装和卸载(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
注意,注意,这里你很可能连不上网,有坑 . 毕竟要从google下载,所以你可能需要科学上网才能继续下载咯。sudo pip install --upgrade $TF_BINARY_URL
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/anaconda2 conda create -n tensorflow Python=2.7
ii. 激活tensorflow环境,并安装
source activate tensorflow export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp27-none-linux_x86_64.whl sudo pip install --ignore-installed --upgrade $TF_BINARY_URL
iii. 退出tensorflow环境,完成安装 (以后每次使用tensorflow之前都需要激活一下tensorflow环境)
source deactivate tensorflow
二. 安装位置
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/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.convolutional
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting 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