TensorFlow是用数据流图(data flow graphs)技术来进行数值计算的。数据流图是描述有向图中的数值计算过程。
有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。
节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。
1.将计算流程表示成图;
2.通过Sessions来执行图计算;
3.将数据表示为tensors;
4.使用Variables来保持状态信息;
5. 分别使用feeds和fetches来填充数据和抓取任意的操作结果
【注】:(1)使用图(graph)来表示任务(2)被称之为会话(Session)的上下文(context)中执行图 (3)使用tensor表示数据(4) 通过变量(Variable)维护状态 (5)使用feed和fetch可以为任意操作(arbitrary operation)赋值或者从其中获取数据
过程就是:建图->启动图->运行取值
计算矩阵相乘:
import tensorflow as tf
# 建图
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
# 启动图
sess = tf.Session()
# 取值
result = sess.run(product)
print result
sess.close()
图必须在会话(Session)里被启动,会话(Session)将图的op分发到CPU或GPU之类的设备上,同时提供执行op的方法,这些方法执行后,将产生的张量(tensor)返回。 创建一个 Session 对象, 如果无任何创建参数, 会话构造器将启动默认图。
会话负责传递 op 所需的全部输入,op 通常是并发执行的。
总结:
1.tensorflow在开始时是在构建一个有向图,形成数据流图。
2.然后使用会话(session)run并发执行有向图节点(option)。
# 启动默认图.
sess = tf.Session()
# 调用 sess 的 'run()' 方法, 传入 'product' 作为该方法的参数,
# 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op),
# 向方法表明, 我们希望取回矩阵乘法 op 的输出.
result = sess.run(product)
# 返回值 'result' 是一个 numpy `ndarray` 对象.print result
# ==> [[ 12.]]# 任务完成, 需要关闭会话以释放资源。
sess.close()
交互式使用
在 Python API 中,使用一个会话 Session 来 启动图, 并调用 Session.run() 方法执行操作.
1.变量 Variable,是维护图执行过程中的状态信息的. 需要它来保持和更新参数值,是需要动态调整的
2.tf.initialize_all_variables,是预先对变量初始化。Tensorflow 的变量必须先初始化,然后才有值!而常值张量是不需要的。
下面的 assign() 操作和 add() 操作,在调用 run() 之前, 它并不会真正执行赋值和加和操作
#例:使用变量实现一个简单的计数器
# -创建一个变量, 初始化为标量 0. 初始化定义初值
state = tf.Variable(0, name="counter")
# 创建一个 op, 其作用是使 state 增加 1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 才真正通过Tensorflow的initialize_all_variables对这些变量赋初值
init_op = tf.initialize_all_variables()
# 启动默认图, 运行 op
with tf.Session() as sess:
# 运行 'init' op
sess.run(init_op)
# 打印 'state' 的初始值
# 取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时,
# 传入一些 tensor, 这些 tensor 会帮助你取回结果.
# 此处只取回了单个节点 state,
# 也可以在运行一次 op 时一起取回多个 tensor:
print sess.run(state)
# 运行 op, 更新 'state', 并打印 'state'
for _ in range(3):
sess.run(update)
print sess.run(state)
# 输出:# 0# 1# 2# 3
Tensorflow文档中使用了三种记号来方便地描述张量的维度:阶,形状以及维数。以下展示了它们之间的关系:
作者:QQ595454159
链接:https://www.imooc.com/article/details/id/41019
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作