(基于tensorflow 1.14 c'pu版本,读者需要具有良好的python基础和线性代数知识)
第三章分别介绍TensorFlow的计算模型、数据模型和运行模型,以对TensorFlow的工作原理有一个大致的了解。
3.1 计算图————TensorFlow的计算模型
- 计算图的概念
TensorFlow这个单词由两部分组成:tensor代表张量,是数据结构;flow代表流,是计算模型。
流动的事务具有有向性,计算图就是一个具有‘每一个节点都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系’性质的有向图。
- 计算图的使用
TensorFlow程序一般分为两个阶段。第一阶段:定义计算图中所有的计算,然后定义一个计算来得到他们的和;第二阶段:执行计算。
在TensorFlow程序中,系统会自动维护一个默认的计算图,通过tf.get_default_graph()函数可以获取这个默认的计算图
import tensorflow as tfa = 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 tfg1 = 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中的计算图不仅可以隔绝张量和计算,它还提供了管理张量和计算的机制