Tensorflow 10分钟快速上手

xiaoxiao2021-02-28  132

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.6miu.com/read-18725.html

最新回复(0)