Tensorflow 10分钟快速上手

Tensorflow 快速上手

系统版本 : Ubuntu 16.04LTS
Python版本 : 3.6.1
Tensorflow 版本 : 1.0.1

本文依据教程 TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learners的内容编写…
实现了教程中的所有指令,内容进行了不完整的翻译,仅供参考

Part 1 Basics of Tensorflow

Tensorflow 中,数据 通过 图(graph) 流动 (flow) .
数据 用 n 维数组表示,叫做 Tensors
图 由 数据(Tensors) 和 数学运算 组成

  • 图的节点(nodes)代表 数学运算
  • 图的边缘(edges)代表 各种数学运算中流动的数据(tensors)
    Tensorflow 与 一般编程语言很大不同的一点是:
  • 在Tensorflow 中,要先将整个程序结构构建出来,也就是将 graph 设计好,在这个过程中,所有变量都没有赋值
  • 完整的 graph 设计好后,需要在 session 中运行,在这个运行过程中,各个变量才会被赋值

在Python编程环境下,首先,导入 Tensorflow,如下

import tensorflow as tf

(i)Graph in Tensorflow

Graph 是 Tensorflow 的骨干结构,所有的 计算/操作/变量 都离不开 graph.
Tensorflow 提供的默认 graph 可以通过以下命令获得

graph = tf.get_default_graph()

运行以下指令可以 查看并输出所有 图 中的操作(operations)

for op in graph.get_operations():
    print(op.name)

会发现输出为空,在之后添加了 操作 内容后,再次运行上述命令,就可以查看到 图 中的所有操作.
同时创建多个 图 也是可以的,当下暂且不提

(ii)Tensorflow session

Graph 用来定义 操作 ,而所有 操作 只有在 session 中才能运行
Graph 和 session 之间是相互独立的
如果说 graph 是建筑的设计图, session 就是建筑的施工工地
设计好的 graph 中没有变量,当我们在 session 中运行 graph 时,才会给予有值的变量
创建session两种方法:

  • [1]
sess=tf.Session()
... your code ...
... your code ...
sess.close()

每次 open 一个 session 都一定要有对应的 close

  • [2]
with tf.Session() as sess:
    sess.run(f)

使用 with block 更加方便,每次 with clock 运行完后都会自动关闭 session ,推荐这种写法

(iii)Tensors in Tensorflow

a)常量

定义方式如下:

a = tf.constant(1.0)
print(a)
Tensor("Const:0", shape=(), dtype=float32)

显示常量 a ,结果如上.可以发现,与一般语言不同,在 session 外是无法显示出常量的值的.
在 session 中运行一下显示指令,可以发现常量值就可以直接输出来了

with tf.Session() as sess:
    print(sess.run(a))
1.0

b)变量

变量定义方式如下:

b = tf.Variable(2.0,name ="test.var")
b
<tensorflow.python.ops.variables.Variable at 0x7f1a8189eac8>

变量没有一个固定的取值,需要 初始化 操作.
每个变量分别初始化效率很低,Tensorflow 提供了同时初始化所有变量的指令
在version0.12 以后的版本,初始化指令如下:

init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(b))
2.0

session 中运行,初始化并输出变量,可以看到 定义的变量 b ,被赋值为2 .

c)Placeholders

Placeholder 是 等待被 初始化 或 fed 的 tensors ,
只有当 代码 真正在 session 中被运行时,数据才会被 feed 给 placeholders,
提供给 placeholders 的 数据叫做 feed_dict
Feed_dict are key value pairs for holding data

a = tf.placeholder("float")
b = tf.placeholder("float")
y = tf.multiply(a,b)
feed_dict={a:2,b:3}
with tf.Session() as sess:
    print(sess.run(y,feed_dict))
6.0

(iv) Device in TensorFlow

Tensorflow 支持 cpu gpu gpu群 ,我们可以选择代码运行的计算硬件
整个 Tensorflow 的工作结构如下图所示

Part 2 Tensorflow tutorial with simple example

1.创建随机正态分布:

w = tf.Variable(tf.random_normal([784,10],stddev = 0.01))

2.均值 reduce_mean

b = tf.Variable([20,30,40,45,3,5,67],name = 'b')
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(tf.reduce_mean(b)))
30

3.Argmax

a = [[0.1,0.4,0.3],[10,20,30]]
b = tf.Variable(a,name = 'a')
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(tf.argmax(b,1)))
[1 2]

4.线性回归练习

import numpy as np      #之前已经导入了tensorflow

a) 训练数据生成

trainX 在 -1 到 1 之间取值
trainY 是 trainX 的三倍 加上一个随机干扰值

trainX = np.linspace(-1,1,101)
trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33

b) placeholders 定义

X = tf.placeholder("float")
Y = tf.placeholder("float")

c)建模(Modeling)

线性回归模型 是 y=wx 我们需要通过模型计算出 w
初始化 w 为 0
cost function 定义为 (Y-y_model)的平方
Tensorflow 提供了很多 optimizer ,在每个循环更新梯度,最小化cost
我们定义的训练操作是 使用 GradientDescentOptimizer ,以 0.01 的学习率 最小化 cost
在循环中运行训练操作

w = tf.Variable(0.0, name="weights")
y_model = tf.multiply(X, w)

cost = (tf.pow(Y-y_model, 2))
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

d)训练(Training)

现在,我们定义好了 graph ,但我们没进行任何运算
在创建 session 前,我们先定义好 初始化所有变量的指令 init
在 session 中, 首先运行 init ,完成初始化
然后,进行循环,在循环中,运行 graph 中定义好的训练操作 train_op
最终,输出得到的 w =3.03938,与预期相符
注意: session 结束后,所有的变量又会恢复没有值的状态

init= tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for i in range(100):
        for (x, y) in zip(trainX, trainY):
            sess.run(train_op, feed_dict={X: x, Y: y})
    print(sess.run(w))
3.03938
原文地址:https://www.cnblogs.com/blogofnickchen/p/7221637.html