TensorFlow的基本用法

基本概念
使用TensorFlow前必须明白的基本概念:
图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。
操作(op):图中的节点被称为op(operation的缩写),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。
会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或GPU之类的设备上执行。
变量(Variable):运行过程中可以被改变,用于维护状态。

TensorFlow 的特点:
● 使用图 (graph) 来表示计算任务.
● 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
● 使用 tensor 表示数据.
● 通过 变量 (Variable) 维护状态.
● 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

一个 TensorFlow 图描述了计算的过程。 为了进行计算, 图必须在会话里被启动. 会话将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法。 这些方法执行后, 将产生的 tensor 返回。

TensorFlow程序的基本用法:
构建图-->执行图
在TensorFlow 程序中,通常包含一个构建阶段和一个执行阶段。在构建阶段, op 的执行步骤被描述成一个图。在执行阶段, 使用会话执行执行图中的 op。
例如, 通常在构建阶段创建一个图来表示和训练神经网络, 然后在执行阶段反复执行图中的训练 op。
在会话没有启动之前,所有的op是没有执行的,所有变量的值并没有更新。

TensorFlow Python库已经有一个默认图 (default graph),如果没有指定,那么所有的op都会加入到这个图中。
import tensorflow as tf

# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.
#
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])

# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)

#默认图现在有三个节点, 两个 constant() op, 和一个matmul() op.

# 启动默认图.
sess = tf.Session()

# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数. 
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出.
#
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
# 
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
#
# 返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print(result)
# ==> [[ 12.]]

# 任务完成, 关闭会话.
sess.close()
Session 对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 "with" 代码块 来自动完成关闭动作.
with tf.Session() as sess:
  result = sess.run([product])
  print result

下面介绍一下fetch和feed。
Fetch
会话运行完成之后,如果我们想查看会话运行的结果,就需要使用fetch来实现。在上面的例子里, 我们只取回了单个节点 result, 但是我们也可以取回多个 tensor:
import tensorflow as tf

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)

with tf.Session() as sess:
  result = sess.run([mul, intermed])   #同时运行两个op
  print(result)

# 输出:
# [21.0, 7.0]

Feed
在TensorFlow程序中,有时候我们需要用占位符(placeholder)先预留位置,但不赋值。在等到执行图的时候,就需要给占位符赋值以执行操作,这就是Feed。Feed 只在调用它的方法内有效, 方法结束, Feed 就会消失(有点像局部变量)。
import tensorflow as tf

#创建占位符
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)

with tf.Session() as sess:
    #feed的数据以字典的形式传入。如果没有正确提供 feed, placeholder() 操作将会产生错误
    result = sess.run(output,feed_dict={input1:[7.], input2:[8.]})
    print(result)

# 输出:
# [56.]
参考文档:

猜你喜欢

转载自blog.csdn.net/chinagreenwall/article/details/80787952