(基于 tensorflow 1.14 c’pu 版本,读者需要具有良好的 python 基础 和线性代数 知识)
第三章分别介绍 TensorFlow 的计算模型 、 数据模型 和运行模型,以对 TensorFlow 的工作原理有一个大致的了解。
3.1 计算图————TensorFlow 的计算模型
- 计算图的概念
TensorFlow 这个单词由两部分组成:tensor 代表张量,是数据结构;flow 代表流,是计算模型。
流动的事务具有有向性,计算图就是一个具有‘每一个节点都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系’性质的有向图。
- 计算图的使用
TensorFlow 程序一般分为两个阶段。第一阶段:定义计算图中所有的计算,然后定义一个计算来得到他们的和;第二阶段:执行计算。
在 TensorFlow 程序中,系统会自动维护一个默认的计算图,通过 tf.get_default_graph()函数可以获取这个默认的计算图
import tensorflow as tf
a = tf.constant([1.0, 2.0], name='a')
b = tf.constant([1.0, 2.0], name='b')
result = a + b
#通过 a.graph 属性可以查看这个张量所属的计算图。因为没有特意指定,所以这个计算图应该等于当前默认的计算图
print(a.graph is tf.get_default_graph())
'''
输出 >>>
True
'''
除了使用默认的计算图,TensorFlow 支持通过 tf.Graph 函数来生成新的计算图。不同计算图上的张量和运算不会共享 。
以下代码示意了如何通过在不同的计算图上定义和使用变量。
import tensorflow as tf
g1 = tf.Graph()
with g1.as_default():
v = tf.get_variable('v', shape=[1], initializer=tf.zeros_initializer)
g2 = tf.Graph()
with g2.as_default():
v = tf.get_variable('v', shape=[1], initializer=tf.ones_initializer)
'''
tf.Graph()没有实现__enter__()方法,做不到下面那优雅 pythonic 的写法。with tf.Graph() as g2:
v = tf.get_variable('v', shape=[1], initializer=tf.ones_initializer)
Traceback (most recent call last):
File "D:/bb/TensorFlow/Untitled1.py", line 7, in <module>
with tf.Graph() as g2:
AttributeError: __enter__
'''
with tf.Session(graph=g1) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("", reuse=True):
print(sess.run(tf.get_variable('v')))
with tf.Session(graph=g2) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("", reuse=True):
print(sess.run(tf.get_variable('v')))
'''
输出 >>>
[0.]
[1.]
注:先不要管代码是什么含义,继续往下看
'''
TensorFlow 中的计算图不仅可以隔绝张量和计算,它还提供了管理张量和计算的机制