TensorFlow计算模型—计算图

  TensorFlow是一个经过计算图的形式来表述计算的编程系统。其中的Tnesor,表明它的数据结构,而Flow表明它的计算模型。TensorFlow中的每个计算都是计算图上的一个节点,而节点之间的线描述了计算之间的依赖关系。编程

  在TensorFlow程序中,系统会自动维护一个默认的计算图,经过tf.get_default_gragh函数能够获取当前默认的计算图。网络

除了默认的计算图,TensorFlow也支持经过tf.Graph函数来生成新的计算图。不一样的计算图上的张量和运算不会共享。以下示例:数据结构

 

#coding:utf-8
import tensorflow as tf g1 = tf.Graph() with g1.as_default(): #在计算图g1中定义一个变量v,而且设置初始值为0
    v = tf.get_variable(name="v",initializer=tf.zeros_initializer( )(shape=[1])) g2 = tf.Graph() with g2.as_default(): # 在计算图g2中定义一个变量v,而且设置初始值为0
    v = tf.get_variable(name="v", initializer=tf.ones_initializer( )(shape=[1])) with tf.Session(graph=g1) as sess: # 运行初始化的两种方法
    init = tf.global_variables_initializer() sess.run(init)

   #这个方法已通过时
#tf.initialize_all_variables().run() #这句话是什么意思? with tf.variable_scope("",reuse=True): #经过名字获取变量 print(sess.run(tf.get_variable("v"))) with tf.Session(graph=g2) as sess: # 运行初始化的两种方法 init = tf.global_variables_initializer() sess.run(init) #tf.initialize_all_variables().run() #这句话是什么意思? with tf.variable_scope("",reuse=True): #经过名字获取变量 print(sess.run(tf.get_variable("v")))

 

  上面的代码产生了两个计算图,每一个计算图中定义了一个名字为“v”的变量。在计算图g1中,将v初始化为0;在计算图g2中,将v初始化为1.因而可知,当运行不一样的计算图时,变量v的值也不同。函数

  Tensorflow中的计算图不单单能够用来隔离张量和运算,还能够提供管理张量和运算的机制。学习

  计算图能够经过tf.Graph.device()函数来指定运行的设备。这是由于tensorflow使用了GPU机制。一下代码演示指派GPU的操做。spa

import tensorflow as tf a = tf.constant([1,2]) b = tf.constant([3,4]) g = tf.Graph() with g.device('/gpu:0'): c = tf.add(a, b, "add") with tf.Session() as sess: print(sess.run(c))

  在一个计算图中,能够经过集合(collection)来管理不一样类别的资源。好比经过tf.add_to_collection()函数将资源加入一个或多个集合中。而后经过tf.get_collection获取集合中的全部资源。这里的资源能够是张量、变量或者运行Tensorflow程序所须要的队列资源等等。日志

                  TensorFlow中维护的集合列表code

集合名称 集合内容 使用场景
tf.GraphKeys.VARIABLES 全部变量 持久化TensorFlow模型
tf.GraphKeys.TRAINABLE_VARIABLES 可学习的变量(通常指神经网络中的参数) 模型训练、生成模型可视化内容
tf.GraphKeys.SUMMARIES 日志生成相关的张量 TensorFlow计算可视化
tf.GraphKeys.QUEUE_RUNNERS 处理输入的QueueRunner 输入处理
tf.GraphKeys.MOVING_AVERAGE_VARIABLES 全部计算了滑动平均值的变量 计算变量的滑动平均值
相关文章
相关标签/搜索