Tensorflow 安装和简单入门

Submitted by Lizhe on Wed, 08/16/2017 - 14:12

Tensorflow的安装其实很简单

centos7自带了python2.7所以python的安装可以省略掉

yum install  python-pip python-devel

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

安装结束...

 

然后试试helloworld

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

python helloGraph.py

会得到如下输出

[root@localhost helloworld]# python hellotf.py
Hello,TensorFlow!
42
[root@localhost helloworld]# 

 

再来试试tensorboard

给上面的代码添加一个图形输出

import tensorflow as tf
hello = tf.constant('Hello,TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
writer = tf.train.SummaryWriter('./my_graph',sess.graph)
 

调用后会在指定的目录生成一个graph文件

450

我不打算每次都深入site-packages目录所以建了一个软链

link -s /usr/lib/python2.7/site-packages/tensorflow/tensorboard/tensorboard.py tensorboard.py

python tensorboard.py --logdir=/root/pythonsource/helloworld/my_graph

上面的命令会启动一个端口为6006的web server

451

452

 

数据流图是一种有向图, 用于定义计算结构

在tensorflow中数据流图本质上是一组链接在一起的函数, 每个函数都可以将结果输出给其他函数

上图中的add接收两个参数,输出一个结果(这里直接返回给客户端了)

f(1,2) = 1+2

add是这个图的节点(表示operation), 箭头则是边

输入可以取自文件,用户直接输入或者网络

 

试试复杂一点的例子

import tensorflow as tf

sess = tf.Session()

a = tf.constant(5)
b = tf.constant(3)
c = a * b
d = a + b 
e = c + d
writer = tf.train.SummaryWriter('./my_graph2',sess.graph)

453

mul和add两个operation是并发执行的, 并不能说因为代码里先写的mul, mul就一定会先于add执行, 当然这里的并发指的是先后顺序不定,它们也可能是先执行完一个再执行下一个

有可能, 但是不一定是 "同时" 执行

在Tensorflow中, 每个节点都被称为Operation, 各个Op可以接收0个或者多个Tensor对象(tensor这个词本身就是"张量"的意思,注意不是麻辣烫那个)

然后输出0个或者多个Tensor对象

在这个例子里也就是说, mul是一个Op, 它有两个输入项, 分别是

a = tf.constant(5)
b = tf.constant(3)

constant函数创建了一个生产常量的Op, 它接收一个单个张量值(分别是5和3), 然后直接将输入值输出给连接的节点

该函数会自动将常量值5和3转换为Tensor对象.

 

要运行一个数据流图, 还需要创建一个TensorFlow的Session对象

sess = tf.Session()

session对象在运行时负责对数据流图进行监督,并且是运行数据流图的主要接口

这里其实可以对任意Op使用sess.run() , 它的作用仅限于看看输出而已, 并不关心任何中间值

 

对于TensorBoard, 我们创建了一个SummaryWriter对象, 它可以用来保存来自数据流图的数据和概括统计量

它接收两个参数, 第一个是输出目录, 第二个是session对象的graph属性,该属性引用了索要追踪的数据流图

SummaryWriter对象初始化完成后就会立即写入该数据流图的描述

 

因为这里我们没有保存任何概括统计量,所以初始页面会提示No scalar data was found.

最后我们把今天这个例子写的规范一些,添加一些name标示,并且手动关闭writer和session ( 虽然程序运行结束会自动关闭 )

import tensorflow as tf

sess = tf.Session()

a = tf.constant(5,name="user_input_1")
b = tf.constant(3,name="user_input_2")
c = tf.mul(a,b, name="mul_op")
d = tf.add(a,b, name="add_op")
e = tf.add(c,d, name="sum_op")
sess.run(e)
writer = tf.train.SummaryWriter('./my_graph2',sess.graph)

writer.close()
sess.close()

454