乐趣区

TensorFlow学习笔记第三章TensorFlow入门

(基于 tensorflow 1.14 c’pu 版本,读者需要具有良好的 python 基础线性代数 知识)

第三章分别介绍 TensorFlow计算模型 数据模型 运行模型,以对 TensorFlow 的工作原理有一个大致的了解。

3.1 计算图————TensorFlow 的计算模型

  1. 计算图的概念

TensorFlow 这个单词由两部分组成:tensor 代表张量,是数据结构;flow 代表流,是计算模型。
流动的事务具有有向性,计算图就是一个具有‘每一个节点都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系’性质的有向图。

  1. 计算图的使用

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 中的计算图不仅可以隔绝张量和计算,它还提供了管理张量和计算的机制

退出移动版