TensorFlow计算图简介

       TensorFlow编程与C、C++、JAVA等高级程序设计语言有很大的不同。在高级程序设计语言中,都是一步一步计算的,每计算完一步就可以得到一个执行结果。在TensorFlow中,首先需要构建一个计算图,然后按照计算图启动一个会话,在会话中完成变量赋值,计算,得到最终结果等操作。因此,可以说TensorFlow是一个按照计算图设计的逻辑进行计算的编程系统。可以把这个计算图看作是一个有向图,每一个计算都可以看作图中的一个节点,节点之间的边反映了节点之间的依赖关系。


        TensorFlow的计算图可以分为两个部分:(1)构造部分,包含计算流图;(2)执行部分,通过session执行图中的计算。

        构造部分又分为两部分:(1)创建源节点;(2)源节点输出传递给其他节点做运算。

        TensorFlow默认图:TensorFlow python库中有一个默认图(default  graph)。节点构造器(op构造器)可以增加节点。


在TensorFlow中,系统会维护一个默认的计算图,可以通过tf.get_default_graph()获取。

        向默认的计算图中添加一个操作,可以使用下面的方式:

c = tf.constant(3.0) 
assert c.graph == tf.get_default_graph()

不使用默认的计算图编程方式如下:

g = tf.Graph()
with g.as_default():
    c = tf.constant(3.0)
    assert c.graph is g

#coding:utf-8
import tensorflow as tf

g1 = tf.Graph()
with g1.as_default():
    # 在图g1中定义初始变量v, 并设置初始值为0
    v = tf.get_variable("v", shape=[1], initializer = tf.zeros_initializer(dtype=tf.float32))

g2 = tf.Graph()
with g2.as_default():
    # 在图g1中定义初始变量v, 并设置初始值为1
    v = tf.get_variable("v", shape=[1], initializer = tf.ones_initializer(dtype=tf.float32))


with tf.Session(graph=g1) as sess:
    sess.run(tf.global_variables_initializer())
    with tf.variable_scope('', reuse=True):
        # 输出值为0
        print sess.run(tf.get_variable("v"))



with tf.Session(graph=g2) as sess:
    sess.run(tf.global_variables_initializer())
    with tf.variable_scope('', reuse=True):
       # 输出值为1
       print sess.run(tf.get_variable('v'))
       上面的程序分别创建了计算图,并采用了with代码块的方式访问数据和关闭session,运行不同的计算图的时候,得到的v的值是不一样的。


       还可以指定计算图运行在哪个设备上,具体代码如下:

g = tf.Graph()
# 指定计算运行的设备
with g.device('/gpu:0'):
    result = a + b

         其实,最直观的方式就是把TensorFlow的计算图想象成神经网络结构,在这个结构中每一个节点可以看作操作(op),每个节点的连线就相当于与这个节点的输入,这个节点的输出的直接连线作为下一个直接相连的节点的输入。当计算图构造完成之后,还不能直接得到每个节点的值,必须启动session之后才能得到。


参考文献:

(1)TensorFlow计算模型-----计算图。点击打开链接

(2)关于TensorFlow计算图与tensor的理解。点击打开链接

(3)TensorFlow入门(三)----TensorFlow的计算图和tensor。点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值