TensorFlow 简介
TensorFlow 是一个使用数据流图进行数值计算的开放源代码软件库。图中的节点代表数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。借助这种灵活的架构,可以通过一个 API 将计算工作部署到桌面设备、服务器或移动设备中的一个或多个 CPU 或 GPU。TensorFlow 最初是由 Google Brain 团队(隶属于 Google 机器智能研究部门)中的研究人员和工程师开发的,旨在用于进行机器学习和深度神经网络研究。但该系统具有很好的通用性,还可以应用于众多其他领域。
tensorflow是通过计算图的形式来表达计算的编程系统,计算图也叫数据流图,可把计算图看做一个有向图,tensorflow中的每个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。
为了理解Tensorflow,首先要明确以下几点:
- 使用图 (graph) 来表示计算任务.
- 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
- 使用 tensor 表示数据.
- 通过 变量 (Variable) 维护状态.
数据流图 Data Flow Graphs
Tensorflow将计算与执行分离开来:
- 创建一张图,定义好图中的计算
- 使用session(会话)去执行图中的计算
什么是tensor
tensor 看作是一个 n 维的数组或列表.
0-d tensor: scalar(number)
1-d tensor: vector
2-d tensor: matrix
and so on
实例理解数据流图
执行下面并不会输出8,而是输出tensor相关信息
import tensorflow as tf
a = tf.add(3, 5)
print(a)
output:
Tensor("Add:0", shape=(), dtype=int32)
需要创建一个session,然后在session计算图,取出a的值
import tensorflow as tf
a = tf.add(3, 5)
# create a session, assign it to variable sess so we can call it later
sess = tf.Session()
# within the session,evaluate the graph to fetch the value of a
print(sess.run(a))
sess.close()
output:
8
为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个 tensor:
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])
print(result)
output:
[21.0, 7.0]
需要获取的多个 tensor 值,在图中的节点op(operation 的缩写)的.一次运行中一起获得(而不是逐个去获取 tensor)
tf.Session().run()函数参数
run(fetches, feed_dict=None, options=None, run_metadata=None)
tf.Session().run() 执行 fetches 中的操作,计算 fetches 中的张量值。
这个函数执行一步 TensorFlow 运算,通过运行必要的图块来执行每一个操作,并且计算每一个 fetches 中的张量的值,用相关的输入变量替换 feed_dict 中的值。
fetches 参数可能是一个单一图元素,或者任意嵌套列表,元组,namedtuple,字典,或者有序字典在叶子中包含图元素。
返回值为fetches的执行结果。
如果fetches是一个元素就返回一个值;若fetches是一个list,则返回list的值,若fetches是一个字典类型,则返回和fetches同keys的字典。